如何使用包含斜杠字符的参数?
Posted
技术标签:
【中文标题】如何使用包含斜杠字符的参数?【英文标题】:How to use parameters containing a slash character? 【发布时间】:2016-04-06 22:08:26 【问题描述】:person
集合中的我的 MongoDB 键是这样的:
TWITTER/12345678
GOOGLE/34567890
TWITTER/45678901
...
我这样定义getPersonByKey
路由:
router.route('/getPersonByKey/:providerKey/:personKey').
get(function(req, res) // get person by key
var key = req.params.providerKey + '/' + req.params.personKey;
// ...
);
当然,我更希望能够写出这样的东西:
router.route('/getPersonByKey/:key').
get(function(req, res) // get person by key
var key = req.params.key;
// ...
);
但这不起作用,因为GET http://localhost/getPersonByKey/TWITTER/12345678
当然会导致 404,因为带有斜杠的参数被解释为两个不同的参数...
有什么想法吗?
【问题讨论】:
***.com/q/16829803/438992, ***.com/q/10020099/438992? 【参考方案1】:如果您的参数中包含斜杠,您可以使用它
app.get('/getPersonByKey/:key(*)', function(req, res) ... )
它对我有用(至少在 Express 4 中)。就我而言,我使用了 ABC1/12345/6789(10)
之类的参数。
希望这有用。
【讨论】:
【参考方案2】:Express 内部使用path-to-regexp 进行路径匹配。
正如documentation 中所述,您可以通过在参数本身后面添加一个用括号括起来的正则表达式来使用“自定义匹配参数”。
您可以使用以下路径获得您需要的结果:
router.route('/getPersonByKey/:key([^/]+/[^/]+)').
get(function(req, res) // get person by key
var key = req.params.key;
// ...
);
您可以测试和验证这条路线或任何其他路线here。
【讨论】:
完美。这就是答案。 完美。感谢您分享这个阿米特。我们可以使用 RegEx 真是太好了。以上是关于如何使用包含斜杠字符的参数?的主要内容,如果未能解决你的问题,请参考以下文章