注册回调并返回文档

时间:2015-08-17 03:37:46

标签: node.js mongodb loopbackjs strongloop

这是我与NodeJS和Mongo的第一次体验。我在一个单独的JS文件中处理所有数据库查询处理程序,作为另一个文件中的模块导出,该文件处理用户请求。我想从集合表中搜索(findOne)用户文档,并将其返回给被调用者。但是,一旦查询执行完成,我无法弄清楚如何注册回调并返回文档。

这是我的代码,我在其中调用方法:

var record = mongoDataHandler.getUserRequestObject(credentials.email, "");

如何更改此调用,使其看起来像:

mongoDataHandler.getUserRequestObject(credentials.email, "", function (result){
 //handle the result response here
});

这是我的getUserRequestObject,在另一个JS文件(mongodatahandler.js)中:

var MongoClient = require('mongodb').MongoClient
    , format = require('util').format;
var assert = require('assert');
var ds = require('../../server/datasources.json');
var dbMongoConnectorUrl = ds.MongoDBDev.url;

module.exports = {
getUserRequestObject : function(email, number){
        var documentObj = null;
        MongoClient.connect(dbMongoConnectorUrl, function(err, db) {
            if (err) throw err;
            console.log("Connected to Database");
            var cursor = db.collection('UserRequestCode').find({"email": "someemail@gmail.com"}).sort( { _id: -1} ).limit(1);
            cursor.each(function(err,doc) {
                if (err) documentObj = {status:500, resp:err};
                if (doc != null){
                    console.dir(doc);
                    documentObj = {status:200, resp:doc};
                    return;
                }
            });
        });
        return documentObj;
    }
}

返回的对象(documentObj)始终为null。这是因为它没有注册到回调函数。

我应该如何在此处注册回调,以便我从集合中检索的文档异步工作?

1 个答案:

答案 0 :(得分:2)

只需在函数中添加另一个参数并将其视为一个函数(没有其他语法,只是假装它是一个函数):

getUserRequestObject : function(email, number, my_own_callback){

        /* .. lots of code .. */

        // return documentObj;
        my_own_callback(documentObj); // this is how it's done
}