我正在使用node.jsexpress MongoDB和Mongoose为我的应用程序创建rest api。我想知道是否有任何类型可以替换下面这样的代码以获得更通用的代码?我不想一直传递所有参数,但只想在特定时间内传递。大多数时候我只想通过其中的一部分。通常在 Java 中,我会为此类内容创建构建器,但我不知道 Javascript 的任何技巧:)
exports.getMessages = function (req, res) {
var from = req.query.from;
var deleted = req.query.deleted;
var readed = req.query.readed;
if(from && deleted && readed) {
Message.find({to: req.user.email, from: from, deleted: deleted, readed: readed}, function(err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
})
} else if(from && deleted) {
Message.find({to: req.user.email, from: from, deleted: deleted}, function(err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
})
} else if (from && readed) {
Message.find({to: req.user.email, from: from, readed: readed}, function (err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
});
} else if(deleted && readed) {
Message.find({to: req.user.email, deleted: deleted, readed: readed}, function (err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
});
} else if(deleted){
Message.find({to: req.user.email, deleted: deleted}, function(err, messages) {
if(err) {
req.send(err);
}
res.json(messages);
})
} else if(readed){
Message.find({to: req.user.email, readed: readed}, function(err, messages) {
if(err) {
req.send(err);
}
res.json(messages);
});
} else if(from){
Message.find({to: req.user.email, from: from}, function(err, messages) {
if(err) {
req.send(err);
}
res.json(messages);
});
}
};
最佳答案
只需有条件地构建查找查询对象,我认为这是尽可能通用的,只需根据需要添加到allowedParams
exports.getMessages = function (req, res) {
var allowedParams = [
'deleted',
'readed',
'from'
];
var query = {
to: req.user.email
};
for(param in req.query) {
if(allowedParams.indexOf(param) !== -1) {
query[param] = req.query[param];
}
}
Message.find(query, function (err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
});
}
关于javascript - 为 mongodb REST API 编写通用查询函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26367469/