Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 用于req.query的筛选函数_Node.js_Mongodb_Express - Fatal编程技术网

Node.js 用于req.query的筛选函数

Node.js 用于req.query的筛选函数,node.js,mongodb,express,Node.js,Mongodb,Express,目前,我有以下几点: router.get('/contatos',function(req,res){ if(req.query.nome){ Contato.find({ nome: req.query.nome }, function (err, contato) { console.log(contato); if (JSON.stringify(contato) == "[]") { return res.status

目前,我有以下几点:

router.get('/contatos',function(req,res){
if(req.query.nome){
     Contato.find({ nome: req.query.nome }, function (err, contato) {
         console.log(contato);
        if (JSON.stringify(contato) == "[]") {
            return res.status(404).json({ Error: "that contact doesn't exist" });
        }

        if (err) {
            return res.status(500);
        }
        return res.send(contato);
    });   
}

if(req.query.email){
     Contato.find({ email: req.query.email }, function (err, contato) {
        if (!contato) {
            return res.status(404).json({ Error: "that contact doesn't exist" });
        }

        if (err) {
            return res.status(500);
        }
        return res.send(contato);
    });   
}

if(Object.keys(req.query).length === 0){
 Contato.find(function (err, contatos) {
        if (JSON.stringify(contatos) == "{}") {
            return res.status(404).json({ Error: "there are no contacts" });
        }

        if (err) {
            return res.status(500);
        }
        return res.send(contatos);
    }).populate('emergencia');      
}

if(!req.query.nome && !req.query.email){
    return res.status(400);
}

});
正如你们所看到的,mongo查询几乎是一样的,唯一改变的是我传递的值,所以为了改变这一点,我尝试做一个函数,如下所示:

function filtro(campo,valor,req,res){
if(arguments[0] != "undefined" && arguments[1] != "undefined"){
   // i pass no parameters to filtro so here i just get all values  
}
else{
    Contato.find({campo:valor},function(err,contatos){
        if(err){
            return res.status(500);
        }
        return res.send(contatos);
    });
}

}
然后在上面我放置的第一个代码中,我只是将mongo数据替换为
returnFiltro(“email”,req.query.email)
返回过滤器(“nome”,req.query.nome)


我想知道我所做的是否正确,我只是错过了一些东西,因为在《邮递员》上,它没有给我任何响应,它一直在加载。

为了简化一下,你可以做一些类似

router.get('contatos', function(req, res){
    var query = {};
    if(req.query.nome) query.nome = req.query.nome;
    if(req.query.email) query.email = req.query.email;

    Contato.find(query, function (err, contato) {
        if(err) return res.json({status : 500, error : err});
        if(!contato) return res.json({status : 404, error : "Contact not found"});

        return res.json(contato);
    });   

}

为了简化一下,你可以做一些事情,比如

router.get('contatos', function(req, res){
    var query = {};
    if(req.query.nome) query.nome = req.query.nome;
    if(req.query.email) query.email = req.query.email;

    Contato.find(query, function (err, contato) {
        if(err) return res.json({status : 500, error : err});
        if(!contato) return res.json({status : 404, error : "Contact not found"});

        return res.json(contato);
    });   

}

棒极了,很好的解决方案我不记得了:D,我能很快问你其他问题吗?我明白了逻辑,这对我来说比代码更重要基本上我想在我的联系人中进行ParcialUpdate,所以我必须这样做/contatos/:id/name,但这个名称可以是3种不同的东西:姓名、电子邮件或电话,我如何检查它以及如何构建路线?很棒的解决方案不记得了:D,我可以快速问你一些其他问题吗?我得到了逻辑,这对我来说比代码更重要基本上我想在我的联系人中进行ParcialUpdate,所以我必须这样做/contatos/:id/name,但是这个名字可以是三个不同的东西:名字、电子邮件或电话、我如何检查它以及我如何构建路线?