如何使用包含斜杠字符的参数?

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 真是太好了。

以上是关于如何使用包含斜杠字符的参数?的主要内容,如果未能解决你的问题,请参考以下文章

你如何 grep 一个包含斜杠的字符串?

PHP中如何将反斜杠()替换为正斜杠(/)

如何在字符串中使用反斜杠 (\)?

如何编码 Azure 存储表行键和分区键?

python如何去掉字符串中的斜杠

如何使用单个反斜杠转义字符串的特殊字符