web-dev-qa-db-ja.com

ファイル間で分割する場合、router.useを使用してルーターの未定義パラメーターを表現する

これがExpressのバグなのか、それとも何か間違ったことをしているだけなのか(おそらく後者)はわかりませんが、req.paramsはリクエストの最終ステップでのみパラメーターを保持していることがわかりました。私が何を意味するかを示すために:

実例:

router.get('/:id/test', function(req, res){
    // req.params.id is not undefined
});

機能しません:(

ファイル1:

router.use('/:id', require('./file2'));

ファイル2:

router.get('/test', function(req, res){
    // req.params.id is undefined?!
});

さて...上記は私には完全に非論理的であるように思われます。Expressジェネレーターが上記の方法でルートを定義しているので、それでもどこかのパスで定義する必要があります。確かに私はまだ「id」にアクセスできるはずですか?

だから基本的に、私は何かが欠けていますか?これは意図的ですか/文書化されていますか? FWIW Expressv4.12.0を使用しています。

免責事項:ファイルのことはおそらく無関係ですが、後悔するよりも安全である方が良いでしょう。

32
whitfin

File 2Routerを作成するときは、親からパラメータを継承するように指示する必要があります。

var router = express.Router({mergeParams: true});

http://expressjs.com/api.html#router

49
loganfsmyth