【问题标题】: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,因为带有斜杠的参数被解释为两个不同的参数... 有什么想法吗?

【问题讨论】:

标签: javascript regex node.js express routes


【解决方案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 真是太好了。
    猜你喜欢
    • 2014-02-28
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2012-12-19
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多