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

Mar*_*coS 5 javascript regex routes node.js express

我在person集合中的MongoDB密钥是这样的:

TWITTER/12345678
GOOGLE/34567890
TWITTER/45678901
...
Run Code Online (Sandbox Code Playgroud)

我用getPersonByKey这种方式定义路线:

router.route('/getPersonByKey/:providerKey/:personKey').
  get(function(req, res) { // get person by key
    var key = req.params.providerKey + '/' + req.params.personKey;
    // ...
  }
);
Run Code Online (Sandbox Code Playgroud)

当然我更愿意写这样的东西:

router.route('/getPersonByKey/:key').
  get(function(req, res) { // get person by key
    var key = req.params.key;
    // ...
  }
);
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为GET http://localhost/getPersonByKey/TWITTER/12345678当然会产生404,因为带斜杠的参数被解释为两个不同的参数......任何想法?

Ami*_*mit 10

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

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

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

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


您可以在此处测试并验证此路线或任何其他路线.


小智 8

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

app.get('/getPersonByKey/:key(*)', function(req, res) { ... })
Run Code Online (Sandbox Code Playgroud)

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