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) => { ... })