Express入門をexpress 4.xで学ぶ場合のメモ

http://dotinstall.com/lessons/basic_expressjsはExpress 3.xが前提となっているのだが、Express 4.xで学ぶ場合には少し気をつけなければならない所があるので、以下にメモしておく。
【補足】
この記事を書いた時から更に変更が加わっているため、本記事のコメントも参考にして下さい。


http://dotinstall.com/lessons/basic_expressjs/26502
上記はexpressコマンドの使い方を学ぶ章であるが、Express 4.x以降はexpressコマンドのインストール方法が変わっているので注意が必要である。

$ sudo npm install express -g

演習では上記のコマンドを叩いているが、Express 4.x以降は以下のコマンドも実行する必要があった。

$ sudo npm install express-generator -g
$ node app

また、expressコマンドで作成したひな形アプリを起動するのに上記のコマンドを叩いているが、以下のコマンドに変更する必要がある。

$ npm start


http://dotinstall.com/lessons/basic_expressjs/26503
app.jsの内容を一部修正する必要がある。具体的には以下。

var express = require('express'),
    app = express();
 
// app.use(app.router); この行が不要になった
 
app.get('/', function(req, res) {
    res.send('hello world');
});
app.get('/about', function(req, res) {
    res.send('about this page!');
});
 
app.listen(3000);
console.log("server starting...");


http://dotinstall.com/lessons/basic_expressjs/26506
レッスンではmiddlewareが有効になるかどうかは、app.use(app.router)より前か後ろかで決まるとなっている。
しかし、Express 4.xではapp.use(app.router)の記載が不要になっているので、middlewareが有効になるかどうかはapp.get()より前か後ろかで決まる模様。


http://dotinstall.com/lessons/basic_expressjs/26507
ログ情報をターミナルに出力するmiddleware(logger)はexpressにバンドルされなくなったようなので、後継であるmorganを使う(GitHub - expressjs/morgan: HTTP request logger middleware for node.js)。具体的には、まず以下のコマンドでmorganをインストール。

$ npm install morgan

次にコードを以下のように変更する。

var express = require('express'),
    morgan = require('morgan'),
    app = express();
 
// middleware
// app.use(express.logger('dev'));
app.use(morgan());  // app.use(morgan('short')); 等とするとログの出力量を減らすことが出来る。

なお、Migrating from 3.x to 4.xによると、自分で作るmiddlewareはapp.get()やapp.post()より後ろに記載すべきとなっている。


http://dotinstall.com/lessons/basic_expressjs/26510
jsonとurlencodedの両middlewareもexpressにバンドルされていないので、後継であるbody-parserを使う。

$ npm install body-parser

コードは以下。

var express = require('express'),
    bodyParser = require('body-parser'),
    morgan = require('morgan'),
    app = express(),
    post = require('./routes/post');

// middleware
// app.use(express.json());
// app.use(express.urlencoded());
app.use(bodyParser());


http://dotinstall.com/lessons/basic_expressjs/26512
express.methodOverride()もexpressにバンドルされていないのでmethod-overrideもインストールする。

$ npm install method-override

コードは以下。

var express = require('express'),
    bodyParser = require('body-parser'),
    methodOverride = require('method-override'),
    morgan = require('morgan'),
    app = express(),
    post = require('./routes/post');

// middleware
// app.use(express.json());
// app.use(express.urlencoded());
// app.use(express.methodOverride());
app.use(bodyParser());
app.use(methodOverride());


http://dotinstall.com/lessons/basic_expressjs/26520
ここでも同様にexpress.cookieParser()、express.session({secret: '***********'})、express.csrf()が使えないので、それぞれcsurfexpress-sessioncookie-parserをインストールする。コードは割愛。


【参考資料】