在Express中,有没有办法让匹配路径按照路径中定义的顺序传递参数?
我希望能够将路线中的所有参数应用到另一个函数。问题是这些参数不是预先知道的,所以我不能明确地通过名称引用每个参数。
app.get(':first/:second/:third', function (req) {
output.apply(this, req.mysteryOrderedArrayOfParams); // Does this exist?
});
function output() {
for(var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
致电GET: "/foo/bar/baz"
期望输出(按此顺序):
foo
bar
baz
答案 0 :(得分:1)
req.route.keys
是一个有序的参数数组,其内容遵循{name:'first'}
。
所以,代码:
app.get(':first/:second/:third', function (req) {
var orderedParams = [];
for (var i = 0; i < req.route.keys; i++) {
orderedParams.push(req.params[req.route.keys[i].name]);
}
output.apply(this, orderedParams);
});
function output() {
for(var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
答案 1 :(得分:0)
据我所知,通过快速路径参数机制,这是一个非常简单的子系统。我认为好老req.path.split('/')
是你的朋友。
答案 2 :(得分:0)
我相信你想要的是req.route.params
对象。
请参阅Express docs。
中的详情答案 3 :(得分:0)
如果你不想使用param id但想要他们的订单,那么就这样做
app.get('/:0/:1/:2', function (req,res) {
console.log(req.params);
console.log(req.params[0]);
console.log(req.params[1]);
console.log(req.params[2]);
res.end();
});
//output
[ 'a', 'b', 'c' ]
a
b
c
GET /a/b/c 200 5ms
[ 'c', 'b', 'a' ]
c
b
a
GET /c/b/a 200 1ms
将按照匹配的顺序
答案 4 :(得分:0)
你的头衔有误导性。你正在寻找解析路径,但你的标题是我在寻找获得参数时找到的,所以我会发一个答案。
我使用lodash将第一个参数(req.params)验证为Mongo / ObjectId。在您的情况下,您可以使用lodash键或值进行索引...
req.route.keys不适用于我和req.params [0]
if (_.size(req.params) === 1) {
if (!mongoose.Types.ObjectId.isValid(_.values(req.params)[0])) {
return res.status(500).send('Parameter passed is not a valid Mongo ObjectId');
}
}