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

时间:2016-01-02 23:25:41

标签: javascript regex node.js express routes

person集合中的My 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,因为带斜杠的参数被解释为两个不同的参数...... 有什么想法吗?

2 个答案:

答案 0 :(得分:9)

Express内部使用path-to-regexp进行路径匹配。

documentation中所述,您可以使用"自定义匹配参数"通过在参数本身之后添加括在括号中的正则表达式。

您可以使用以下路径获取所需的结果:

router.route('/getPersonByKey/:key([^/]+/[^/]+)').
  get(function(req, res) { // get person by key
    var key = req.params.key;
    // ...
  }
);

<小时/> 您可以测试并验证此路线here

答案 1 :(得分:1)

如果您的参数中包含斜杠,您可以使用它

app.get('/getPersonByKey/:key(*)', function(req, res) { ... })

它对我有用(至少在 Express 4 中)。就我而言,我使用了 ABC1/12345/6789(10) 之类的参数。
希望这有用。