Node.js res.send()在嵌套函数使用值完成之前运行
“GetUsers”函数正在运行,并按预期返回正确的值。但是,res.send(users)在嵌套函数使用该值完成之前运行,因此它是未定义的。我尝试过从嵌套函数内部执行res.send(users),但它无法识别该函数。我也尝试过使用return用户,但无法使其正常工作。任何帮助都将不胜感激Node.js res.send()在嵌套函数使用值完成之前运行,node.js,express,Node.js,Express,“GetUsers”函数正在运行,并按预期返回正确的值。但是,res.send(users)在嵌套函数使用该值完成之前运行,因此它是未定义的。我尝试过从嵌套函数内部执行res.send(users),但它无法识别该函数。我也尝试过使用return用户,但无法使其正常工作。任何帮助都将不胜感激 app.get('/GetUsers', function (req, res){ var url = 'mongodb://localhost:27017/users'; var user
app.get('/GetUsers', function (req, res){
var url = 'mongodb://localhost:27017/users';
var users = "";
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
console.log('Connection established to', url);
// Get the documents collection
var collection = db.collection('users');
// Get some users
collection.find().toArray(function (err, res) {
if (err) {
console.log(err);
} else {
console.log('Got Information from db.');
}
//Close connection
db.close();
console.log('db closed.');
users = res;
console.log(users);
});
}
});
res.send(users);
});
只需在调用console.log(users)
之前/之后,在回调中移动res.send(users)
您在
toArray
调用中重用了变量res
,因此请将其重命名为:…toArray(函数(err,res)
到…toArray(函数(err,result)这是一个异步调用,它将发送响应,并且不会等待数据库连接功能。
写入res.send in回调函数
在关闭数据库连接的地方编写res.send函数
下面是详细信息找到了答案
正如上面的用户建议所指出的,在关闭数据库之后,我需要在回调中使用res.send(users)。但是,这一点本身并不能作为res.send(users)工作,因为它没有被识别为函数。我必须使用res.send({'matched':users})然后在客户端访问我的响应对象,如下所示:response.matched.objects等
谢谢大家的帮助!可能是重复的我已经尝试过了,但是我得到了一个类型错误:res.send不是一个function.Ups。抱歉,监督您重用了变量res
。请重命名…toArray(function(err,res).
为…toArray(function(err,result)…
并在users=res;
至users=result;
中执行此操作。感谢您的回复。不幸的是,我尝试了此操作,但仍然res.send(users)在嵌套函数完成之前正在运行。您好,我已经尝试过了,但得到了一个TypeError:res.send不是函数。请将其他变量与function`collection.find().toArray(函数(err,res)一起使用{`这超过了res function@Matrixuse result或data,而不是res在这个函数@MatrixThanks中感谢您的响应。不幸的是,我尝试了这个方法,但res.send(users)仍然在嵌套函数完成之前运行。