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

时间:2015-12-16 22:31:30

标签: 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 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');
});

但是当我请求/ testUserId时,只有路由器模块中的param()运行,我认为app.param()将首先运行,然后运行router.param(),但事实上并非如此,任何人都可以帮助解释原因(我必须错过Express的API文档的某些部分以及如何使它们都运行?

由于

1 个答案:

答案 0 :(得分:3)

我同意这有点令人困惑。有关于此的讨论,并打开了问题以澄清文档中的这种行为(Explain that .param doesn't get inherited in mounted routers.)。

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

  

Param回调函数对于它们所在的路由器是本地的   定义。它们不是由已安装的应用程序或路由器继承的。因此,   在app上定义的param回调只能由路由触发   应用路线上定义的参数。

总结一下,您看到的行为是预期的。嵌套的路由器'或者' apps'不要从父应用程序继承.param()