这是我与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。这是因为它没有注册到回调函数。
我应该如何在此处注册回调,以便我从集合中检索的文档异步工作?
答案 0 :(得分:2)
只需在函数中添加另一个参数并将其视为一个函数(没有其他语法,只是假装它是一个函数):
getUserRequestObject : function(email, number, my_own_callback){
/* .. lots of code .. */
// return documentObj;
my_own_callback(documentObj); // this is how it's done
}