Node.js使用mongoclient连接mongodb

时间:2014-10-10 07:28:15

标签: javascript node.js mongodb callback

在节点JS中,我只想编写一些外部方法,从mongodb中检索数据并返回它。我已经使用MongoClient.js模块与mongodb进行交互。但问题是在调用外部方法时,它会在数据库连接方法完成执行之前返回值。在这里,我只想保留我的return语句,直到mongodb.connect方法完成。该怎么办? 我的代码如下,

service.js

var employee = require('./model/employeeService.js');
var json = employee.getUser(employeeId);

其中employeeService充当与数据库交互并将数据返回到service.js的模型,其中我们的Web服务已写入并响应用户。

employeeService.js

exports.getUser = function(employeeId) {
    var json = [];
    MongoClient.connect(db.getdbUrl(),function(err,db){
        if(err) {
            json = err; 
         }else {
            document = (employeeId)?{_id:employeeId}:{};
            db.collection('Employee').find(document).limit(50).toArray(function(err,users){
            if(err) {
                json = err;
            }
            else {
                    console.log("Inside MongoClient"); // this will executes second
                    json = users;
                }
            });
        }
    });
    console.log("OutSide",json);   // this executes first
    return json;
}

在这里,我可以从输出控制台找到连接MongoClient.connect方法的异步执行流程,并通过从service.js调用它来获取空数组。

输出控制台

OutSide []
Inside MongoClient

1 个答案:

答案 0 :(得分:0)

这是not异常流,这是asynchronous代码执行的方式。如果您想要退回用户,请将其返回else{},将json = users;替换为return users;,然后删除代码末尾的返回。

然后学习更多有关Asynchrounous vs Synchrounous次来电及其执行方式的内容。并且还考虑在Javascript中学习callback