Iまし以下のミドルウェア: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();
}
SCENARIO 1
router.get('/resource/:resourceId',
injectParamMiddleware,
logParamMiddleware,
...MoreMiddlewares)
SCENARIO 2
router.use('/resource/:resourceId', injectParamMiddleware, logParamMiddleware);
router.get('/resource/:resourceId', ...MoreMiddlewares);
シナリオ1を実行している間、私はspecialValue
は、コンソールにログインして取得します。 SCENARIO 2を実行しているときに、コンソールにundefined
が記録されています。
私はシナリオ2にログspecialValue
も記録すると予想していました。
本当にありがとうございます。 ありがとうございます。
EDIT:私は、ルータがparams
を作成するものであるとして6.10.3
私は通常、 'use'は依然として尊重されたオーダーと思っていましたが、順序依存のものには' router.use(....) 'の代わりに' router.all(...) 'を使用します。 – Funkodebat
' req .params'は 'router.use()'を使って追加された各ミドルウェアが呼び出される前にリセットされます。 'app.all()'でも同じことは起こりません。これが文書化された動作であるかどうかはわかりませんが、確かに私が知らなかったものです。 – robertklep