Javascript node.js-post响应未等待回调完成
我正在node.js http服务器上工作。服务器已连接到mongodb。我请求向服务器发送post请求,以从mongodb获取文档。但是post响应并不等待mongodb回调完成。因此,我无法在客户端获得所需的输出。如何处理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
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页面)给客户。真的很抱歉。问题解决了。问题的来源不同。我提供了不完整的信息。谢谢您的帮助。