'GetUsers'函数正在运行,它按预期返回正确的值。但是,res.send(users)在嵌套函数完成之前正在运行,因此未定义。我已尝试从嵌套函数内部执行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);
});
答案 0 :(得分:1)
在致电res.send(users)
之前/之后,只需在回调中移动console.log(users)
。
您在res
来电中重复使用变量toArray
,因此请在其中重命名:...toArray(function (err, res)...
至...toArray(function (err, result)...
以及users = res;
至{{1} }}
答案 1 :(得分:0)
这是异步调用它将发送响应并且不会等待数据库连接功能。
在回调函数中写res.send
在关闭数据库连接的地方编写res.send函数。
这里是详细信息How do I return the response from an asynchronous call?
答案 2 :(得分:0)
找到答案!!!
在我关闭数据库之后,我需要在回调中使用res.send(users),如上面的用户建议所指出的那样。但是,由于res.send(用户)没有被识别为函数,因此单独行动并不起作用。我不得不使用res.send({'匹配':用户}),然后在客户端访问我的响应对象,如:response.matched.objects等。
感谢大家的帮助!