router.use中间件链不按预期工作?

我有以下中间件:

injectParamMiddleware.js

module.exports = function(req, res, next) { req.params.specialParam = 'specialValue'; next(); } 

logParamMiddleware.js

 module.exports = function(req, res, next) { console.log(req.params.specialParam); next(); } 

情景1

 router.get('/resource/:resourceId', injectParamMiddleware, logParamMiddleware, ...MoreMiddlewares) 

情景2

 router.use('/resource/:resourceId', injectParamMiddleware, logParamMiddleware); router.get('/resource/:resourceId', ...MoreMiddlewares); 

在运行SCENARIO 1时,我在控制台中获得了specialValue 。 在运行SCENARIO 2时,我在控制台中得到了undefined日志。

我期待SCENARIO 2也loggingspecialValue

任何帮助真的很感激。 提前致谢。

编辑:我使用Express 4.14.0和节点6.10.3

场景2由于路由器是创buildparams而导致“按devise”的错误。 它正在被覆盖

您可以将var分配给app.use中的另一个属性,该属性将传递给请求,例如req.specialParam = 'specialValue'

 app.param('/user/:name', (req, res) => { req.specialParam = 'specialValue'; }); 

其他选项是使用.param()方法修改参数。

 app.param('/user/:name', (req, res) => {}); 

要么

 app.route('/user/:name') .all((req, res) => { ... console log here }) .get((req, res) => { ... })