Javascript 从Node.js应用程序中的模型层异步返回数据
我正在开发一个节点应用程序,并用一个单独的模型层来组织代码。该模型有一个名为getImages的函数,它利用Mongojs模块从数据库中获取信息。问题是getImages在检索数据之前返回。我习惯于使用同步代码,所以这个问题很难让我理解。我怀疑答案是采用回调函数。有人能告诉我这是怎么回事吗?或者,如果回调不是解决方案,那么是什么 routes/index.jsJavascript 从Node.js应用程序中的模型层异步返回数据,javascript,node.js,Javascript,Node.js,我正在开发一个节点应用程序,并用一个单独的模型层来组织代码。该模型有一个名为getImages的函数,它利用Mongojs模块从数据库中获取信息。问题是getImages在检索数据之前返回。我习惯于使用同步代码,所以这个问题很难让我理解。我怀疑答案是采用回调函数。有人能告诉我这是怎么回事吗?或者,如果回调不是解决方案,那么是什么 routes/index.js exports.image = function(req, res) { if (req.method == 'GET') {
exports.image = function(req, res) {
if (req.method == 'GET') {
var image = model.getImages();
return res.send(image);
}
}
var getImages = function() {
var imagesCollection = db.collection('Images');
var images = imagesCollection.find(function(err, docs) {
return docs;
});
return images;
}
exports.getImages = getImages;
exports.image = function(req, res) {
if (req.method == 'GET') {
model.getImages(function(err, images) {
return res.send(images);
});
}
}
var getImages = function(callback) {
var imagesCollection = db.collection('Images');
imagesCollection.find(callback);
}
exports.getImages = getImages;
models/index.js
exports.image = function(req, res) {
if (req.method == 'GET') {
var image = model.getImages();
return res.send(image);
}
}
var getImages = function() {
var imagesCollection = db.collection('Images');
var images = imagesCollection.find(function(err, docs) {
return docs;
});
return images;
}
exports.getImages = getImages;
exports.image = function(req, res) {
if (req.method == 'GET') {
model.getImages(function(err, images) {
return res.send(images);
});
}
}
var getImages = function(callback) {
var imagesCollection = db.collection('Images');
imagesCollection.find(callback);
}
exports.getImages = getImages;
您需要为
getImages
函数提供回调参数。例如:
routes/index.js
exports.image = function(req, res) {
if (req.method == 'GET') {
var image = model.getImages();
return res.send(image);
}
}
var getImages = function() {
var imagesCollection = db.collection('Images');
var images = imagesCollection.find(function(err, docs) {
return docs;
});
return images;
}
exports.getImages = getImages;
exports.image = function(req, res) {
if (req.method == 'GET') {
model.getImages(function(err, images) {
return res.send(images);
});
}
}
var getImages = function(callback) {
var imagesCollection = db.collection('Images');
imagesCollection.find(callback);
}
exports.getImages = getImages;
models/index.js
exports.image = function(req, res) {
if (req.method == 'GET') {
var image = model.getImages();
return res.send(image);
}
}
var getImages = function() {
var imagesCollection = db.collection('Images');
var images = imagesCollection.find(function(err, docs) {
return docs;
});
return images;
}
exports.getImages = getImages;
exports.image = function(req, res) {
if (req.method == 'GET') {
model.getImages(function(err, images) {
return res.send(images);
});
}
}
var getImages = function(callback) {
var imagesCollection = db.collection('Images');
imagesCollection.find(callback);
}
exports.getImages = getImages;
似乎您是imagesCollection.find是异步函数。以下是您可以尝试的代码
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);
}
}
谢谢在我看来,这很简单。