在Express JS中获取req.params

在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 

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]); } } 

据我所知,通过快速路由params机制,这是一个非常简单的子系统。 我觉得好老req.path.split('/')是你的朋友在这里。

我相信你想要的是req.route.params对象。

在快速文档中查看更多信息。

如果你不想使用参数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 

这将是他们匹配的顺序

您的标题是误导性的。 你正在寻找parsing的path,但你的标题是我find的时候find的参数,所以我会发表一个答案。

我用lodashvalidation第一个参数(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'); } }