Node.js 如果在Express中指定router.param,为什么app.param不起作用

Node.js 如果在Express中指定router.param,为什么app.param不起作用,node.js,express,middleware,Node.js,Express,Middleware,全部: 我对Express.js很陌生,当我尝试.param()时,一件有趣的事情是: 在app.js(主服务器文件)中,我有如下内容: app.param("id", function(req, res, next, id){ console.log(id+" in app level"); next(); }) app.use("/", routes); 应用程序是Express应用程序对象,在路由器模块中: router.param("id", function(req, res

全部:

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

在app.js(主服务器文件)中,我有如下内容:

app.param("id", function(req, res, next, id){
  console.log(id+" in app level");
  next();
})
app.use("/", routes);
应用程序是Express应用程序对象,在路由器模块中:

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');
});
但是当我请求/testUserId时,只有路由器模块中的param()运行,我以为app.param()会先运行,然后再运行router.param(),但实际上不是,有人能解释一下为什么(我一定错过了Express中API文档的某些部分)以及如何使两者都运行吗


谢谢

我同意这有点令人困惑。关于这一点进行了讨论,并在文档()中阐明了这一行为

以下是最新的解释:

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

总而言之,您看到的行为是预期的。嵌套的“路由器”或“应用程序”不会从父应用程序继承
.param()