我正在开发一个应用程序,我必须按运动名称进行过滤。我是 在后端使用 Node.js 和 MongoDB。
这是我的代码:-
router.route('/user/:_id/explore/:sportsname')
.get(function(req, res, next){
var query = Host.find();
if(req.query.sportsname){
query.where({sportsname:req.query.sportsname});
}
query.exec(function(err,sportsname){
if(err)
return next(err);
res.json(sportsname);
console.log(sportsname);
})
});
这是文档。我想按体育名称搜索用户
[
{
"_id":"5460e2af4ee5216f17000061",
"maxplayer":"1",
"minplayer":"11",
"date":"10 August 2014",
"venue":"google",
"time":"Afternoon",
"sportsname":"Lawn Tennis",
"__v":0
},
{
"_id":"5460ff1b4ee5216f17000065",
"maxplayer":"0",
"minplayer":"9",
"date":"10 October 2014",
"venue":"google",
"time":"Early Morning",
"sportsname":"Cricket",
"__v":0
},
{
"_id":"5461a4014ee5216f17000089",
"maxplayer":"4",
"minplayer":"29",
"date":"13 December 2014",
"venue":"google",
"time":"Afternoon",
"sportsname":"Lawn Tennis",
"__v":0
}
]
当我在那个时间运行时,它没有过滤。
最佳答案
首先,您使用的是req.query.sportsname
这是为了从查询字符串中获取参数。
正如其他人在评论中提到的,您应该使用 req.params.sportsname
另一种方法是使用 `req.param('sportsname')
这将按以下顺序查找参数:
- req.params
- req.body
- req.query
但是,这是一个小问题
我发现的一个问题是您的 sportsname
中存在空格/大写
"sportsname":"Lawn Tennis",
但是您通过 URL 参数传递这些 - “/user/id/explore/Lawn Tennis”不是有效的有效 URL,并且将被编码为“Lawn%20Tennis”
解决此问题的一种方法是使用 decodeURIComponent
-
因此,尝试将您的查询更改为:
query.where({sportsname:decodeURIComponent(req.params.sportsname)});
(请注意我使用的是 req.params
而不是 req.query
)
另一种方法是在文档中存储附加元素 -
类似 sportsnameslug 的东西 -
您将在保存文档时创建它
(例如将“Lawn Tennis”转换为“lawn-tennis”)
然后查询
关于node.js - 如何按运动名称过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887295/