Javascript 使用名称数组表示router.param

Javascript 使用名称数组表示router.param,javascript,express,Javascript,Express,我正在尝试使用router.param方法初始化多个express router参数。以下是路由器代码片段: var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.render('index', { title: 'Express' }); }); router.param(['foo','bar'], function(req,r

我正在尝试使用router.param方法初始化多个express router参数。以下是路由器代码片段:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

router.param(['foo','bar'], function(req,res,next,foo,bar){
  req.myvars = {
    foo: foo,
    bar: bar
  };
  console.log('initialized params: foo==%s, bar==%s', foo, bar);
  return next();
});

router.get('/myvars/:foo/:bar',function(req,res,next){
  var foo = req.myvars.foo;
  var bar = req.myvars.bar;
  console.log('router.get: foo==%s, bar==%s', foo, bar);
  res.json(req.myvars);
});

module.exports = router;
浏览到时出错:无法读取未定义的属性“foo”。此外,我的控制台窗口没有像我预期的那样显示“初始化参数”。router.param是否未被调用?如何正确使用router.param方法?我在网上看到了很多使用router.param的示例(仅使用一个名称:有人能给出一个使用router.param的名称数组的代码示例吗?

如果需要,这里是我的package.json依赖项

"dependencies": {
    "express": "~4.8.6",
    "body-parser": "~1.6.6",
    "cookie-parser": "~1.3.2",
    "morgan": "~1.2.3",
    "serve-favicon": "~2.0.1",
    "debug": "~1.0.4",
    "jade": "~1.5.0"
}

查看Express路由器代码,它实际上并不接受名称数组(尽管文档表明它接受)

您可以通过以下方式解决此问题:

var handler = function(req, res, next, value, key) {
  req.myvars = req.myvars || {};
  req.myvars[key] = value;
  next();
};

router.param('foo', handler);
router.param('bar', handler);

它确实支持数组,但是你不能同时解析两个参数。如果你再看一遍文档

router.param(['id', 'page'], function (req, res, next, value) {
  console.log('CALLED ONLY ONCE with', value);
  next();
})

您必须以for-each样式访问它们的值。我也不知道为什么您会返回一个
next()
。我认为这不会引起任何问题,只需调用
next()
并让函数自行终止。

文档中说它不包括数组。但从源代码看,你可以看出它不起作用!@Blind Owl,我发布了一条消息,因为我也有这个问题。我尝试了以下Express文档,并编写了一个匿名函数,支持运行两次,用于URL中的两个参数。有什么建议吗?