在我的路由器中发布请求,我解析搜索参数,然后使用参数使用db find。但是,用户可以选择混合和匹配他想要使用/不想使用的参数(标题/标签),因此最终我必须搜索几个不同的东西,因此有几个条件确定搜索,如下所示。
router.post('/eventItems/:title', function(req, res) {
psuedocode for setting up booleans
这里是使用多个条件确定搜索的地方
if (tagsShouldBeSearched && searchTitle)
{
eventItem.find({title: searchTitle, tags: tags}, function(err, data) {
var jsondata = JSON.stringify(data);
res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user });
});
}
else if (tagsShouldBeSearched)
{
eventItem.find({tags: tags}, function(err, data) {
var jsondata = JSON.stringify(data);
res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user });
});
}
else
{
eventItem.find({title: searchTitle}, function(err, data) {
var jsondata = JSON.stringify(data);
res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user });
});
}
});
有没有更好的方法可以在不使用这么多条件的情况下这样做?我还想过使用丢失的不同路由器地址进行发布,但也许这太过分了?
谢谢!
答案 0 :(得分:2)
您可以使用Mongoose的where
建立您的查询var Query = eventItem.find();
if (tagsShouldBeSearched) Query.where({tags: tags});
if (titleShouldBeSearched) Query.where({title: searchTitle});
Query.exec(function(err, data) {
var jsondata = JSON.stringify(data);
res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user });
});