我有一个等待HTTPREQUESTS的NODEJS服务器。根据请求,它从MongoDB获取一些数据,并将其作为响应发送回去。 JavaScript是一种同步语言,因此始终在从数据库获取数据之前发送响应。这是我转到localhost:8080时编写的测试代码,如果刷新,则不会得到任何信息。就像我说的我知道为什么,我的问题是我不知道如何使服务器等待响应,直到数据库应答。我需要一个事件之类的东西,但我不知道该如何实现...
var http = require('http');
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
var requrl= "localhost:2442"
var testResult = "";
http.createServer(function(requrl,res){
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true },function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("UserInformations").find({name:"a"},{projection: {_id:0}}).toArray(function(errorinfind,result){
if(errorinfind)throw errorinfind;
db.close();
testResult = result[0].name;
});
});
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(testResult.toString());
res.end();
}).listen(8080);
答案 0 :(得分:0)
您可以使用async/await
。如下所示:
http.createServer(async function(requrl,res){
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var db = await MongoClient.connect(url, { useNewUrlParser: true })
var dbo = db.db("mydb");
var resualt = (await dbo.collection("UserInformations").find({name:"a"},{projection: {_id:0}})).toArray();
db.close();
testResult = result[0].name;
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(testResult.toString());
res.end();
}).listen(8080);
如果您想处理错误,也可以用try/catch