Mongodb查询中的未定义值

时间:2017-03-13 00:35:24

标签: json node.js mongodb

我想通过Mongodb查询从服务器端向客户端发送json数据。我已经处理了我对数据库和连接内容的查询。

var key = app.pages.ProjectInfoPage.properties.ProjectKey;
…

我使用此代码段成功发送测试json数据。

function mongoDbHandleLoad()
{
    MongoClient.connect(MongoDBURL, function(err, db)
    {

        /*
         db.createCollection('user', {strict:true},  function(err, collection) {
         if(err)
         return console.dir(err);
         });
         */

        db.collection('user', function(err, collection) {
            if(!err)
            {
                collection.find().toArray(function(err, docs) {
                    if(!err)
                    {
                        var intCount = docs.length;
                        var responseBody;
                        if(intCount > 0)
                        {
                            console.log("responseBody in mongodb handle", JSON.stringify(docs[docs.length-1]));
                            return JSON.stringify(docs[docs.length-1]);
                        }
                    }
                });
            }
        });
    });

    /*
        if(docs != null)
        {
            console.log("docs", docs);
            return resParam.json(docs); //return the first document found
        }
    */
}

当我想发送数据" JSON.stringify(docs [docs.length-1])"在mongoDbHandleLoad()函数里面,即使我用回调改变了函数,我也做不好。我从mongoDbHandleLoad函数中获取未定义的值。如何修改代码以获取" JSON.stringify(docs [docs.length-1])"的正确值。

提前致谢,

1 个答案:

答案 0 :(得分:1)

mongoDbHandleLoad()包含异步代码(对MongoDB的调用),因此它会在代码到达行undefined之前返回return JSON.stringify(docs[docs.length-1]);

您应该使用回调或Promises来取回结果。

我想首先你应该研究一下Javascript中的异步代码,特别是Node.js的约定。