Node.js res.send()在嵌套函数使用值完成之前运行

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

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

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)仍然在嵌套函数完成之前运行。