我有以下中间件:
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) => { ... })