我有以下中间件:

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也记录specialValue

任何帮助都非常感谢。
提前致谢。

编辑:我正在使用Express 4.14.0和Node 6.10.3

最佳答案

方案2导致Express的“按设计”错误,因为路由器是创建params的原因。它被覆盖

您可以将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) => { ... })

10-07 16:07