我使用express for node.js得到了我的param的冒号

时间:2014-05-10 01:38:30

标签: node.js rest express routing

这是我的路线:

router.route('/search:word').get(function(req, res) {
  var re = new RegExp(req.params.word, 'i');
  console.log(req.params.word);

  Place.find().or([{ 'title': { $regex: re }}, { 'category': { $regex: re }}]).sort('title').exec(function(err, places) {
    res.json(JSON.stringify(places));
  });
});

当我使用请求/places/search:test时,控制台显示:test而不仅仅是“test”。 知道发生了什么吗?

3 个答案:

答案 0 :(得分:15)

您真的想使用router.route('/search:word')代替router.route('/search/:word')吗?使用冒号似乎有点奇怪。

如果您使用router.route('/search/:word'),并且您的请求是

/places/search/test

然后你得到req.params.word="test"

答案 1 :(得分:3)

如果您想要相同的模式api端点,例如:/places/search:test,则在api中 端点,您必须使用双冒号。示例-

router.route('/search::word').get(function(req, res) {
   console.log(req.params.word); ---> "test"
});

这就是为什么您要使用多余的冒号:test

答案 2 :(得分:2)

这里发生的事情是它打破了/search[word]的路径。因此,当您请求/search:test时,[word]与/search之后的部分匹配,在这种情况下为:test

您可能需要的是:/search::word