快递Router.param不工作,但app.param确实

问题描述:

我已经挖掉一对夫妇从快车文档线,了解它是如何工作: 快递Router.param不工作,但app.param确实

// ./routes/test.js 

var router = require('express').Router(); 


router.param(['id', 'page'], function (req, res, next, value) { 
    console.log('CALLED ONLY ONCE with', value); 
    next(); 
}); 

router.get('/user/:id/:page', function (req, res, next) { 
    console.log('although this matches'); 
    next(); 
}); 

router.get('/user/:id/:page', function (req, res) { 
    console.log('and this matches too'); 
    res.end(); 
}); 


module.exports = router; 

,并安装它们以通常的方式:app.use('/test', require('./routes/test')); 问题是,在.param传递的回调没有得到执行。当我将第一行更改为var router = require('express')();时,它工作正常。一个应用程序只是一个额外的东西的路由器。

我使用快递4.12.4。有任何想法吗?

+0

看起来像这是一个错误,如果你不提供一个参数数组,但只是一个字符串,它会按预期工作。 – robertklep

+0

@robertklep,你说得对,谢谢。我去提交一个错误。 – vehsakul

嗯,这不是一个错误。这是一个错误,但在文档中。路由器不接受数组作为第一个参数,一个应用程序。

+0

我很高兴我看到你的答案!我刚才发布了一个[问题](http://stackoverflow.com/questions/38337965/express-js-router-process-api-requests-with-multiple-parameters)。所以如果我想用Express路由器和两个URL参数来处理这个问题,我该怎么办? –