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

personcollections中的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,因为带斜线的参数被解释为两个不同的参数…任何想法?

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

正如文档中所解释的那样,通过在参数本身之后添加一个括号中的正则expression式,可以使用“自定义匹配参数”。

您可以使用以下path获取您需要的结果:

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

你可以在这里testing和validation这个或者其他的路线。