如果我在 Express 中指定了一个 router.param,为什么 app.param 不起作用

Kua*_*uan 3 middleware node.js express

全部:

我对 Express.js 很陌生,当我尝试 .param() 时,一件有趣的事情是:

在 app.js (主服务器文件)中,我有类似的东西:

app.param("id", function(req, res, next, id){
  console.log(id+" in app level");
  next();
})
app.use("/", routes);
Run Code Online (Sandbox Code Playgroud)

该应用程序是 Express Application 对象,在路由路由器模块中:

router.param("id", function(req, res, next, id){
    console.log(id + " in router level");
    next();
})

router.get('/:id', function(req, res, next) {
  res.send('respond with a resource');
});
Run Code Online (Sandbox Code Playgroud)

但是当我请求 /testUserId 时,只有路由器模块内的 param() 运行,我以为 app.param() 会先运行,然后是 router.param(),但实际上不是,谁能帮忙解释一下原因(我必须错过来自 Express 的 API 文档的某些部分)以及如何使两者都运行?

谢谢

oKo*_*nyk 5

我同意这有点令人困惑。有关于此的讨论,并打开了问题以澄清文档中的此行为(说明 .param 在已安装的路由器中不会被继承。)。

这是最新的解释: app.param([name], callback)

参数回调函数对于定义它们的路由器是本地的。它们不会被安装的应用程序或路由器继承。因此,应用程序上定义的参数回调将仅由应用程序路由上定义的路由参数触发。

回顾一下,您看到的行为是预期的。嵌套的“路由器”或“应用程序”不继承.param()自父应用程序。