在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'); } }