node.js - Node/express 异步函数 res.send 出现在控制台而不是页面中

标签 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); 应该在浏览器中显示数据,但它在控制台中显示。

我该如何解决这个问题?

最佳答案

两者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 函数将向您的路由返回一个 Promise。

关于node.js - Node/express 异步函数 res.send 出现在控制台而不是页面中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55387292/

相关文章:

database-design - 如何处理 Mongodb 中的数据库清除

java - 将 $addToset 与 java morphia 聚合一起使用

javascript - 基本 Express.js 应用程序中的 "Failed to lookup view"

node.js - 使用 grunt 或 Node 服务器启动服务器时出错

javascript - 如何在NodeJS中的MySQL查询中增加外部变量值

javascript - 路线不适用于模块化结构

javascript - 无法从 javascript 函数调用获取返回值

javascript - meteor 收藏不显示

node.js - Node : Request ISO-8859-1 encoded content

node.js - Node/Express Handlebars - 在哪里定义自定义助手