【问题标题】:Why app.param not work if I specify a router.param in Express如果我在 Express 中指定 router.param,为什么 app.param 不起作用
【发布时间】:2015-12-16 22:31:30
【问题描述】:

全部:

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

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

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

app 是 Express Application 对象,在路由 Router 模块中:

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时,只有router模块内的param()运行,我以为app.param()会先运行然后router.param(),但实际上不是,谁能帮忙解释一下原因(我必须错过来自 Express 的 API 文档的某些部分)以及如何使两者都运行?

谢谢

【问题讨论】:

    标签: node.js express middleware


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 2022-01-20
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多