Express 4 router.param不会触发

时间:2016-01-10 11:47:06

标签: node.js express

我有一个node express 4应用程序,我想在父路由上安装路由(联系人)。即

/:fundid/contacts

在我的基金路线中,我宣布

var router = require('express').Router({ mergeParams: true });

var contactRoutes = require('./contacts');
router.use('/:fundid/contacts', contactRoutes);

在我的联络路线

var router = require('express').Router({ mergeParams: true });

router.param('fundid', function(res, req, next, id){});

问题是这个参数调用不会触发。从我可以从文档中获取的这些param调用是相对于它们被声明的路由器,但我会认为mergeParams:true会影响这一点,但事实并非如此。否则该路由正在工作,并且两个路由都被调用。我错过了什么吗?

我想这样做的原因是因为我想在多个父路线上挂载联系路由,并根据这些父参数构建过滤器

1 个答案:

答案 0 :(得分:0)

This comment表明参数与声明的路由器相关联;所以在你的情况下,fundid只能由“基金”路由器处理。 mergeParams用于不同的目的,即从子路由器提供对req.params.fundid的访问。

您可以随时在联系路由器中使用请求中间件来执行基于fundid的特殊操作:

router.use(function(req, res, next) {
  var id = req.params.fundid;
  ...
});