【问题标题】:Write generic query function for mongodb REST API为 mongodb REST API 编写通用查询函数
【发布时间】:2014-12-09 15:21:40
【问题描述】:

我正在使用 node.js express 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);
        });
    }
};

【问题讨论】:

    标签: javascript node.js mongodb rest mongoose


    【解决方案1】:

    只需有条件地构建您的查找查询对象,我认为这是尽可能通用的,只需根据需要添加到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);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-02
      • 1970-01-01
      • 2020-06-09
      • 2020-01-03
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多