我有以下中间件:
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
答案 0 :(得分:0)
由于路由器创建了const assert = require('assert');
const emptySet = new Set()
assert.strictEqual(![...emptySet].length, true)
assert.strictEqual(emptySet.values().next().value === undefined, true)
assert.strictEqual(emptySet.entries().next().value === undefined, true)
const twoItemsSet = new Set([ 'foo', 'bar' ])
assert.strictEqual(![...twoItemsSet].length, false)
assert.strictEqual(twoItemsSet.values().next().value === undefined, false)
assert.strictEqual(twoItemsSet.entries().next().value === undefined, false)
,因此情景2导致了“设计”表示错误。它被覆盖了
您可以将var分配给将传递给请求的params
中的另一个属性
例如app.use
req.specialParam = 'specialValue'
其他选项是使用app.param('/user/:name', (req, res) => {
req.specialParam = 'specialValue';
});
方法修改参数:
.param()
或
app.param('/user/:name', (req, res) => {});