为mongodb REST API编写通用查询函数

我使用node.js表示MongoDB和Mongoose为我的应用程序创buildrestAPI。 我想知道有什么样的types来代替下面的代码更通用? 我不想一直通过所有的参数,只是在一定的时间。 大部分时间我只想通过他们的一部分。 通常在Java中,我创build这样的东西的build设者,但我不知道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); }); } }; 

只是有条件地build立你的find查询对象,我认为这是通用的,只要添加到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); }); }