expressのapp.use(app.router)
の意味がいまいちわかってなかった。app.getとかapp.postとかを処理する場所を決めるというやつだった。
app.useは登録した順番で呼ばれるので、app.use(app.router)がないこの例では、foo -> bar -> send('hoge') という順番で呼ばれる。
var express = require('express'); var app = module.exports = express.createServer(); app.use(function(req, res, next) { console.log('foo'); next(); }); app.use(function(req, res, next) { console.log('bar'); next(); }); app.get('/', function(req, res, next) { res.send('hoge'); }); app.listen(3000);
一方、app.routerを使うとこうなる。
var express = require('express'); var app = module.exports = express.createServer(); app.use(function(req, res, next) { console.log('foo'); next(); }); // ここで app.get(send('hoge')) が処理される app.use(app.router); // app.getでnextが呼ばれてなければここは処理されない app.use(function(req, res, next) { console.log('bar'); next(); }); app.get('/', function(req, res, next) { res.send('hoge'); }); app.listen(3000);
つまりapp.getの位置が変わってこれと等価になるということ。
var express = require('express'); var app = module.exports = express.createServer(); app.use(function(req, res, next) { console.log('foo'); next(); }); app.get('/', function(req, res, next) { res.send('hoge'); }); app.use(function(req, res, next) { console.log('bar'); next(); }); app.listen(3000);
コードはこの辺。
https://github.com/visionmedia/express/blob/2.4.3/lib/http.js#L92-96
ドキュメントのこの辺に用途も含めて書いてある。
http://expressjs.com/guide.html#middleware