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

标签 javascript node.js mongodb rest mongoose

我正在使用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/

相关文章:

javascript - 如何过滤多维数组

javascript - 未声明 HTML 文档的字符编码

mongodb - docker compose 中 mongodb 的卷配置

javascript - Jest + React 没有方法 'mountComponentIntoNode'

javascript - html5音频多个播放按钮

Javascript如何在setTimeout回调函数中使用参数?

node.js - 在水线中使用不同的列作为默认值

mongodb - 从 MongoExport 中的 unix 时间戳查询 ISODate

Java Spring 5 Get 和 findById mongo MonoOnErrorResume

javascript execCommand ("paste")不工作