Javascript 使用名称数组表示router.param
我正在尝试使用router.param方法初始化多个express router参数。以下是路由器代码片段: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
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中的两个参数。有什么建议吗?