来自MongoDB的NodeJS HTTPResponse

时间:2018-11-28 13:32:30

标签: node.js mongodb http

我有一个等待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);

1 个答案:

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