express4において、ミドルウェア上のapp.paramの条件が複数回一致する場合、都度実行されます。
実際のところ
ミドルウェアの学習用に書いたスクリプトは以下の通り。
"$HOME/:id/:page"てなページにアクセスだけする想定です。
var express = require('express'); var app = express(); app.set('view engine', 'jade'); app.param(['id', 'page'], function (req, res, next, value) { console.log('Called.'); //(1) next(); }); app.param(['id'], function (req, res, next, value) { console.log(':id value', ' => ', value); //(2) next(); }); app.param(['page'], function (req, res, next, value) { console.log(':page value', ' => ', value); //(3) next(); }); app.get('/user/:id/:page', function (req, res, next) { console.log('req.path ', req.path); //(4) next(); }); app.get('/user/:id/:page', function (req, res) { console.log('Coming the render section.'); //(5) var responseText = 'Your page name: ' + req.params.page + " !"; res.render('index', { title: 'Our Apps!', message: responseText}); res.end(); }); app.listen(3000, function () { console.log('Example app listening on port 3000!'); });
nodeを実行した後、http://localhost:3000/user/3/8にアクセスすると
と、まぁ順当な表示がでます。
コンソールを見ると
$ node app.js Example app listening on port 3000! Sun, 14 Feb 2016 11:57:35 GMT Called. :id value => 3 Called. :page value => 8 req.path /user/3/8 Coming the render section.
上記からは
- (1)は二度
- (2),(3),(4),(5)は一度
呼ばれている事がわかります。