在嵌套函数完成值之前,res.send()正在运行

“GetUsers”函数正在运行,并按预期返回正确的值。 但是,res.send(用户)在嵌套函数完成之前运行,因此它是未定义的。 我已经尝试从嵌套函数内执行res.send(用户),但它不能识别该函数。 我也尝试使用返回用户,但不能得到它的工作。 任何帮助,将不胜感激!

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)移到callbackconsole.log(users)

你在toArray调用中重用variablesres ,所以请重命名它: ...toArray(function (err, res)... to ...toArray(function (err, result)... and also in users = res;users = result; users = res;

这是asynchronous调用它将发送响应,而不会等待数据库连接function。 在callback函数中写入res.send
在你closures数据库连接的地方写上你的res.send函数。

这里是细节如何返回来自asynchronous调用的响应?

find答案!

根据上面的用户build议,在closures数据库之后,我需要在callback中使用res.send(users)。 然而,单凭这一点是不工作的res.send(用户)是错误的,因为它不被认为是一个函数。 我不得不使用res.send({'matched':users}),然后在客户端访问我的响应对象,如:response.matched.objects等

谢谢大家的帮助!