节点/快速异步功能重新发送出现在控制台中而不是页面中

时间:2019-03-27 22:15:01

标签: node.js mongodb express async-await

我有一些代码可以从mongo数据库中获取一些数据。

express app.get内部的功能将显示在浏览器的url中,但是在此代码中,结果仅显示在控制台中,而不是显示在网页中。

代码如下:

async function showdb() {

    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('test').findOne({}, function(err, result) {
        if (err) throw err;
        console.log(result);
        return result;
        // res.send(result); // commented out
        // db.close(); // commented out
      });
    });

  }

现在的路线:

app.get('/', (req, res) => {

    showdb().then(result => {
        res.send(result); // result is showing in the console
    })

})

res.send(result);应该在浏览器中显示数据,但在控制台中显示数据。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

MongoClient.connect()collection.findOne() 函数返回Promise,因此您可以链接它们而无需使用带有更少代码的回调:

function showdb() {

  var MongoClient = require('mongodb').MongoClient;
  var url = "mongodb://localhost:27017/";

  return MongoClient.connect(url, { useNewUrlParser: true })
    .then((db) => {
       return db.db('mydb').collection('test').findOne({});
    });
}

现在,showdb函数将向您的路线返回一个承诺。

答案 1 :(得分:0)

您没有包括服务器正在监听的端口。尝试添加以下代码,这可能对您有帮助

var app = express();
app.set('port', 3000);
var server= app.listen(app.get('port'), function()

{

    var port = server.address().port;
    console.log(" Iam at Port:" + " " + port);


});