我正在开发一个node.js项目,我需要在该项目中与mongoDb数据库进行通信。我目前正在编程一个函数,使用node-mongodb-native模块在我的数据库中查找一些数据。一切正常,但我的代码看起来像回调中的回调回调中的回调...
我创建了这个函数,以防止每次我想访问我的数据库时都使用回调。我现在只需要调用这个函数。
module.exports.find = function(query, projection, callback){
db.open(function(err, db){
if(err) throw err;
db.collection('rooms', function(err, collection){
if(err) throw err;
collection.find(query, projection, function(err, cursor){
if (err) throw err;
cursor.toArray(function(err, find){
db.close();
callback(err, find);
});
});
});
});
};
是否有减少此代码的方法?
答案 0 :(得分:2)
如果你只是想知道如何合理地清理回调和范围db:
module.exports.find = function(query, projection, callback){
var local_db;
function db_open(err, db) {
if(err) throw err;
local_db = db;
local_db.collection('rooms', handle_homes_collection);
}
function handle_homes_collection(err, collection){
if(err) throw err;
collection.find(query, projection, handle_find_query);
}
function handle_find_query(err, cursor){
if (err) throw err;
cursor.toArray(function(err, find){
local_db.close();
callback(err, find);
});
}
db.open(db_open);
};
答案 1 :(得分:0)
像这样:
module.exports.find = function(query, projection, callback){
var database;
db.open(function(err, db_temp){
if(err) throw err;
database = db_temp;
});
database.collection('rooms', function(err, collection){
if(err) throw err;
collection.find(query, projection, function(err, cursor){
if (err) throw err;
cursor.toArray(function(err, find){
db.close();
callback(err, find);
});
});
});
};