所有
我是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文档的某些部分以及如何使它们都运行?
由于
答案 0 :(得分:3)
我同意这有点令人困惑。有关于此的讨论,并打开了问题以澄清文档中的这种行为(Explain that .param doesn't get inherited in mounted routers.)。
以下是最新解释: app.param([name], callback)
Param回调函数对于它们所在的路由器是本地的 定义。它们不是由已安装的应用程序或路由器继承的。因此, 在app上定义的param回调只能由路由触发 应用路线上定义的参数。
总结一下,您看到的行为是预期的。嵌套的路由器'或者' apps'不要从父应用程序继承.param()
。