这是我的路线:
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”。
知道发生了什么吗?
答案 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