Node JS mongoose Query没有产生结果

时间:2016-05-17 15:27:28

标签: node.js mongodb express mongoose

几个小时以来一直坚持这个问题。以下代码:

router.route("/contact")
    .get(function(req,res){
        var response = {};
        Contact.find({},function(err,data){
            if(err) {
                response = {"error" : "Error fetching data"};
            } else {
                response = {"message" : data};
            }
            res.json(response);
        });
    })

以上查询会生成数据库中所有联系人的结果,但

router.route("/contact/department/:dept")
    .get(function(req,res){
        var response = {};
        var arrDept = req.params.dept.split(",");
        if(arrDept.length == 0){
            response = {"error": " Please enter Department keywords"};
        }
        else{
            response = {};
            arrDept.forEach(function(currentValue){
                Video.find({dept: '/'+currentValue+'/i'}, function(err, data){
                    if(err){
                        response[currentValue] = "No data found";
                    }else{
                        response[currentValue] = data;
                    }
                });
            });
        }
        res.json(response);
    });

此代码不会产生任何输出。

代码在else块中进入forEach循环,但即使我将查询修改为基本的查询,查询也不会生成任何结果

Video.find({},function(err, data){
                    if(err){
                        response[currentValue] = "No data found";
                    }else{
                        response[currentValue] = data;
                    }
                });

响应JSON仍然返回空白。

PS:问题已经简化,因为这只是我在代码中遇到的实际问题的一个例子。 发现答案后更新。

2 个答案:

答案 0 :(得分:2)

res.json(response)

是在查询之外编写的,这就是返回空白json的原因。上述场景可以使用承诺解决,如下所示:

var promise = Contact.find({ dept: { $in: arrayDept }}).exec(); 
promise.then(function(resultJson) { res.json(resultJson); });

这可用于执行数组中的所有查询并返回完整的json。

答案 1 :(得分:1)

非工作示例中的START "" /AFFINITY 0x1 build_one_qcc.bat 在MongoDB查询的回调之外,即您在查询的回调实际执行之前编写响应,因此结果为空。< / p>