Expressã使ã£ãWebã¢ããªã±ã¼ã·ã§ã³
ãã®ã¨ã³ããªã¯ãã東京Node学園 4時限目ãã®è³æãã®2ã§ãã
æåã«expressãã¤ã³ã¹ãã¼ã«ããã¾ãããã
$ npm install -g express
Nodeã®å ´åãå¿
è¦ãªããã±ã¼ã¸ã®ã¤ã³ã¹ãã¼ã«ã¯ npm ãç¨ãã¦è¡ãã¾ãã-gã¯ã°ãã¼ãã«ãªãã·ã§ã³ã§ããããããã¨ããã±ã¼ã¸ã¯ node ã³ãã³ããããå ´æã¨åãé層ã«ã¤ã³ã¹ãã¼ã«ããã¾ããããããªãå ´åã¯ãç¾å¨ã®ãã£ã¬ã¯ããªã« node_modules ã¨ãããã£ã¬ã¯ããªãä½æãããã®ä¸ã«ã¤ã³ã¹ãã¼ã«ããã¾ãã
Expressã®å ´åãã²ãªå½¢ãä½æãã express ã³ãã³ããæä¾ãããããããã¹ã®éã£ãå ´æã«ãã®ã³ãã³ããé
ç½®ããå¿
è¦ããããããä¸è¨ã®ããã« -g ãã¤ãã¦ã¤ã³ã¹ãã¼ã«ãã¦ãã¾ããã¾ãããã®éãMacã§ã¤ã³ã¹ãã¼ã©ã使ã£ã¦ã¤ã³ã¹ãã¼ã«ãã人㯠sudo ãä»ããå¿
è¦ãããã§ãããã
ããã§ã¯å®éã« express ã³ãã³ãã§ã²ãªå½¢ãä½æãã¦ã¿ã¾ãããã
$ express sample create : sample create : sample/package.json create : sample/app.js create : sample/public create : sample/public/javascripts create : sample/public/images create : sample/public/stylesheets create : sample/public/stylesheets/style.css create : sample/routes create : sample/routes/index.js create : sample/views create : sample/views/layout.jade create : sample/views/index.jade dont forget to install dependencies: $ cd sample && npm install
ã§ãè¨ãããã¨ãã sample ã«å ¥ã£ã¦ npm install ãããã§ããããã®åã«ãã£ã¬ã¯ããªæ§é ã確èªãã¾ãããã
sample â app.js â package.json â public â â images â â javascripts â â stylesheets â â style.css â routes â â index.js â views â index.jade â layout.jade
app.js ãã¡ã¤ã³ã®ããã°ã©ã ã§ãpackage.jsonã npm ã®ããã®è¨å®ãã¡ã¤ã«ãpublicãéçãã¡ã¤ã«ç½®ãå ´ã§ãroutesãã«ã¼ãã£ã³ã°ãã¨ã®ããã°ã©ã ç½®ãå ´ã§ãviewsããã³ãã¬ã¼ãç½®ãå ´ã§ãã
ããã§ã¯å®éã« sample ã«å
¥ã£ã¦ npm install ãã¾ãããã
$ cd sample && npm install
ä»åã¯ãExpressã®ã¤ã³ã¹ãã¼ã«æã¨ã¯éã£ã¦ã npm install ã®å¾ã«ç¹å®ã®ããã±ã¼ã¸åãæå®ãã¾ããã§ããããã®å ´åã npm 㯠package.json ã® dependencies ã«æ¸ããã¦ããããã±ã¼ã¸ãã¤ã³ã¹ãã¼ã«ãã¾ããã¤ã³ã¹ãã¼ã«ãããããã±ã¼ã¸ã¯ node_modules ãã£ã¬ã¯ããªå
ã«æ ¼ç´ãããããã°ã©ã ããåç
§ããã¾ãã
ä»åã®å ´åã Express 㨠jade åã³ãããã®ä¾åããã±ã¼ã¸ãã¤ã³ã¹ãã¼ã«ããã¾ãããExpressã¯æåã«ãï¼ã°ãã¼ãã«ã«ï¼ã¤ã³ã¹ãã¼ã«ãããããªããã¨æãããããããã¾ããããæåã«ã¤ã³ã¹ãã¼ã«ããExpress㯠express ã³ãã³ãã®ããã ãã«å©ç¨ãã¦ãããå®éã«ããã°ã©ã ä¸ããåç
§ãããã®ã¯ãã® node_modules ã®ä¸ã«ããããã±ã¼ã¸ã®æ¹ã§ãã
ã§ã¯ãã¡ã¤ã³ããã°ã©ã ã§ãã app.js ãè¦ã¦ã¿ã¾ãããã
/** * Module dependencies. */ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); // Routes app.get('/', routes.index); app.listen(3000); console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
æåã«requireã§å¿ è¦ãªããã±ã¼ã¸ãèªã¿è¾¼ãã§ãã¾ãã express ãããã±ã¼ã¸åã ã㧠./routes ã¯ç¸å¯¾ãã¹æå®ã«ãªã£ã¦ãã¾ããrequireã¯ç¸å¯¾ãã¹æå®ã®æã¯ãã®ãã¡ã¤ã«ãããã¯ãã®ãã£ã¬ã¯ããªã«ãã index.js or index.json ãèªã¿è¾¼ã¿ãããã§ãªãå ´å㯠ã³ã¢ã¢ã¸ã¥ã¼ã« ããã㯠node_modules å ã«ããã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¿ã¾ãï¼å®éã«ã¯ããã¡ããç´°ããã§ãï¼ã
次㫠express ã®ãµã¼ããªãã¸ã§ã¯ããä½æãããããã¢ã¸ã¥ã¼ã«ã¨ãã¦å ¬éãã¦ãã¾ããããã«ãã£ã¦ãä¾ãã°ãã¹ãã³ã¼ããªã©ããrequireãããã¨ã§ãã®ãµã¼ããªãã¸ã§ã¯ããåç §ãããã¨ãã§ããããã«ãªãã¾ãã
ãã®å¾ã¯ãè¨å®ãç¶ãã¾ãããã³ãã¬ã¼ãã®ç½®ãå ´æããã³ãã¬ã¼ãã¨ã³ã¸ã³ã®ç¨®é¡ãéçãã¡ã¤ã«ã®ç½®ãå ´æçãè¨å®ãã¦ãã¾ããã¾ããdevelopmentã¢ã¼ãã¨productionã¢ã¼ãã§ã®è¨å®ã®æ¯ãåãããã¦ãã¾ããã¡ãªã¿ã«ãããã©ã«ãã§ã¯developmentã¢ã¼ãã§èµ·åãã¾ãããç°å¢å¤æ°NODE_ENVã«productionãè¨å®ããã°productionã¢ã¼ãã§èµ·åã§ãã¾ãã
æå¾ã«ãã«ã¼ãã£ã³ã°ã®è¨å®ãã㦠port 3000 ãå¾ ã¡åãã¦ãã¾ããããã§ã¯æ©éå®è¡ãã¦ã¿ã¾ãããã
$ node app.js Express server listening on port 3000 in development mode
ãã©ã¦ã¶ã§ http://localhost:3000/ ã«ã¢ã¯ã»ã¹ã㦠Welcome to Express ã¨è¡¨ç¤ºããããæåã§ãã
å®éã«ã¢ã¯ã»ã¹ãããæã®åããé ã«è¿½ã£ã¦ããã¾ãããã http://localhost:3000/ ã«ã¢ã¯ã»ã¹ãããã¨ãã«ã¼ãã£ã³ã°ã®è¨å®ã§ããããã« routes.index ãå®è¡ããã¾ããroutes.index 㯠require('./routes').index ã§ãããrequire('./routes') 㯠./routes/index.js ãèªã¿è¾¼ãã®ã§ã./routes/index.js ãè¦ã¦ã¿ã¾ãããã
/* * GET home page. */ exports.index = function(req, res){ res.render('index', { title: 'Express' }) };
require('./routes') ã«ã¯ãã®exportsãå
¥ãããã routes.index ã¯çµå±ãã®functionã«ãªãã¾ãã
ãã®functionã§ã¯ãã¬ã¹ãã³ã¹ãæç»ããéã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®æå®ããã³ãå¤æ°ã®ãã¤ã³ãããããªã£ã¦ãã¾ãããã®å ´åããã³ãã¬ã¼ãã®ç½®ãå ´ã¯./viewsã§ãã³ãã¬ã¼ãã¨ã³ã¸ã³ã¯jadeã ã¨è¨å®ããã¦ããã®ã§ã使ç¨ããããã³ãã¬ã¼ããã¡ã¤ã«ã¯ ./views/index.jade ã«ãªãã¾ããããã©ã«ãã§ã¯åãå ´æã«ããlayout.jadeãèªã¿è¾¼ã¾ãããã® body å¤æ°ã« index.jade ã®ä¸èº«ããã¤ã³ãããã¾ãã
layout.jade ã¯ä»¥ä¸ã®ããã«ãªã£ã¦ãã¾ãã
!!! html head title= title link(rel='stylesheet', href='/stylesheets/style.css') body!= body
titleè¦ç´ ã¨ãã¦titleã«ãã¤ã³ãããå¤ã表示ããCSSãã¡ã¤ã«ãèªã¿è¾¼ãã§ãã¾ããbodyè¦ç´ ã¨ãã¦è¡¨ç¤ºããã®ã¯ã次ã®index.jadeã®ä¸èº«ã§ãï¼!=ã¯escapeããªãã§è¡¨ç¤ºããã¨ããæå³ï¼ã
h1= title p Welcome to #{title}
ãã¡ãã§ã title ã«ãã¤ã³ãããå¤ã2ã¶æã«è¡¨ç¤ºãã¦ãã¾ããjadeã®ç´°ããææ³ã¯ https://github.com/visionmedia/jade ãã覧ä¸ããã