2012-07-22 29 views
1

我正在研究一个节点应用程序,并将其与单独的模型图层结构化以组织我的代码。该模型有一个名为getImages的函数,它使用Mongojs模块从数据库中获取信息。问题是getImages在检索数据之前返回。我习惯于使用同步代码,所以这个问题很难绕过我的头。我怀疑答案是采用回调函数。有人可以展示如何工作?或者如果回调不是解决方案,那是什么?从Node.js App中的模型图层异步返回数据

路线/ index.js

exports.image = function(req, res) { 
if (req.method == 'GET') { 

    var image = model.getImages(); 
    return res.send(image);   
} 
} 

型号/ index.js

var getImages = function() { 

    var imagesCollection = db.collection('Images'); 

    var images = imagesCollection.find(function(err, docs) { 
     return docs; 
    }); 

    return images; 
} 

exports.getImages = getImages; 

回答

2

您需要提供一个回调参数,以此来getImages功能。如:

路线/ index.js

exports.image = function(req, res) { 
    if (req.method == 'GET') { 
     model.getImages(function(err, images) { 
      return res.send(images);   
     }); 
    } 
} 

型号/ index.js

var getImages = function(callback) { 

    var imagesCollection = db.collection('Images'); 

    imagesCollection.find(callback); 
} 

exports.getImages = getImages; 
+0

谢谢!现在我明白了,这很简单。 – hughesdan 2012-07-22 02:37:42

0

好像你是imagesCollection.find是异步function.Here是代码什么奥尤可以试试

var getImages = function(callback) { 

    var imagesCollection = db.collection('Images'); 

    imagesCollection.find(function(err, docs) { 
    if (err) { 
     callback(null); 
    } else { 
     callback(docs); 
    } 

    }); 

} 


exports.getImages = getImages; 
exports.image = function(req, res) { 

var imageDataFunc = function(imageDataFromDB) { 
    if(imageDataFromDB) { 
    res.send(imageDataFromDB); 
    res.end(); 
    } 

} 

if (req.method == 'GET') { 
    model.getImages(imageDataFunc);   
} 
}