在Node.js应用程序中从模型层asynchronous返回数据

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

路线/ 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; 

你需要为你的getImages函数提供一个callback参数。 如:

路线/ 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; 

看起来像你是imagesCollection.find是asynchronous函数。这里是代码什么oyu可以尝试

 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); } }