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

时间:2016-04-27 08:17:41

标签: node.js express

'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);
});

3 个答案:

答案 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等。

感谢大家的帮助!