Javascript node.js-post响应未等待回调完成

Javascript node.js-post响应未等待回调完成,javascript,node.js,mongodb,callback,Javascript,Node.js,Mongodb,Callback,我正在node.js http服务器上工作。服务器已连接到mongodb。我请求向服务器发送post请求,以从mongodb获取文档。但是post响应并不等待mongodb回调完成。因此,我无法在客户端获得所需的输出。如何处理 http.createServer(function(request, response) { if(request.method == "POST") { var body = ''; request.on('data', fu

我正在node.js http服务器上工作。服务器已连接到mongodb。我请求向服务器发送post请求,以从mongodb获取文档。但是post响应并不等待mongodb回调完成。因此,我无法在客户端获得所需的输出。如何处理

http.createServer(function(request, response) {
    if(request.method == "POST") { 
        var body = '';
        request.on('data', function(chunk) {
            console.log(chunk.toString());
            body += chunk;
        });
        request.on('end', function() {
            MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
                if(err) {
                    console.log("We are not connected");
                }   
                else {
                    var sysInfo = db.collection('sysInfo');
                    var jsonObj = sysInfo.find().toArray();
                    response.writeHead(200, {'Content-Type': 'text/plain'});
                    response.end(jsonObj);
                }
            });
        })
    }
});
是异步的,因此它通过回调提供结果,而不是返回结果

因此,这一部分应该是:

sysInfo.find().toArray(function(err, docs) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end(docs);
});

你有错误吗?我这样问是因为mongoose
connect
方法回调只接收到一个
错误
参数。因此,当您执行
db.collection('sysInfo')
时,您应该会得到一个错误(db是
未定义的)。我没有得到任何错误。但是在代码到达response.end(jsonObj)之前,post响应将在客户端接收,该客户端将当前html页面作为其内容。明白了。@johnyhk提供的答案是完美的。我刚才被你问题中的
mongoose
标签弄糊涂了,所以我以为你是想通过
mongoose
直接连接。但后来我意识到你使用的是mongodb本机驱动程序,这没有帮助。原因是,
request.on('end'
…没有等待
MongoClient.connect
回调完成。因此问题是
MongoClient.connect
回调。或者
response.end(docs)
请求后触发。on('end'.
返回数据(当前html页面)给客户。真的很抱歉。问题解决了。问题的来源不同。我提供了不完整的信息。谢谢您的帮助。