Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

app.paramの条件が複数回一致する場合、都度実行される

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にアクセスすると
f:id:shuzo_kino:20160214205923p:plain
と、まぁ順当な表示がでます。

コンソールを見ると

$ 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)は一度

呼ばれている事がわかります。