我使用node.js和mongoose来执行多个HTTP请求,包括get请求。我的get函数将具有相当多的功能并且易于处理许多数据,我试图让局部变量存储来自mongo的返回。例如:
router.get('/getstuff/:test', function(req, res) {
var testId = req.params.test;
var returnStuff = null;
var collection = req.collection;
collection.find({userIdd : testId}, function(err, data){
if (err) console.log(err);
else {
console.log(data); // works, data is shown in log
returnStuff = data; // does not work, data is not saved to returnStuff
}
});
console.log(returnStuff); // undefined
res.send();
});
我试图从数据库(一个数组)返回到returnStuff变量,但是由于关闭,我无法这样做。这可能看起来微不足道,但正如我所说,我将有更多的操作,这将简化事情。
任何人有任何提示吗?真的很感激。
由于
答案 0 :(得分:1)
collection.find
是异步执行的,因此在返回returnStuff之前执行res.send。你可以完全摆脱它,只需在回调中res.send(数据)。
这应该有效:
router.get('/getstuff/:test', function(req, res) {
var testId = req.params.test;
var returnStuff = null; //optional, remove if you don't need it for anything else
var collection = req.collection;
collection.find({userIdd : testId}, function(err, data){
if (err) console.log(err);
else {
console.log(data); // works, data is shown in log
returnStuff = data;
collection.somethingelse(function(err,data2){
returnStuff += data2
res.send(returnStuff);
});
}
});
});
如果您有许多这样的操作,可以将它们放入库中,或者使用像async这样的库 查看这个优秀的资源以获取更多信息:http://book.mixu.net/node/ch7.html