Javascript 为什么Express.js重定向会在Node.js MongoDB应用程序中抛出错误[ERR_HTTP_HEADERS_SENT]?

Javascript 为什么Express.js重定向会在Node.js MongoDB应用程序中抛出错误[ERR_HTTP_HEADERS_SENT]?,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我目前正在使用Node.js、Express.js和MongoDB创建一个基本的RESTAPI。我试图在执行查询后重定向到另一个页面,但我的控制台在标题中抛出了错误。这是我的密码: app.post('/', (req, res) => { MongoClient.connect(process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {

我目前正在使用Node.js、Express.js和MongoDB创建一个基本的RESTAPI。我试图在执行查询后重定向到另一个页面,但我的控制台在标题中抛出了错误。这是我的密码:

    app.post('/', (req, res) => {
  MongoClient.connect(process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
    if (err) throw err;
    const dbo = db.db("mydb");
    const messageTable = dbo.collection("messages");
    let myobj = { message: req.body.message };
    console.log(myobj)
    messageTable.insertOne(myobj, function (err, res) {
      if (err) throw err;
      console.log("1 document inserted");
      db.close();
    });
  });
  //Get message
  MongoClient.connect(process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
    const messageTable = db.db('mydb').collection('messages');

    var myPromise = () => {
      return new Promise((resolve, reject) => {
        messageTable.aggregate(
          [{ $sample: { size: 1 } }]
        ).toArray((err, data) => {
          err
            ? reject(err)
            : resolve(data[0]);
        });
      });
    }
    //Step 2: async promise handler
    var callMyPromise = async () => {
      var result = await (myPromise());
      //anything here is executed after result is resolved
      return result;
    };

    //Step 3: make the call
    callMyPromise().then(function (result) {
      db.close();
      res.json(result);
      res.redirect('/');
      });

    });

  });  //end mongo client
代码仅在我包含
res.redirect('/')时抛出错误

此外,我不知道这是否与此有关,但这是我的get请求:

    app.get('/', (req, res) => {
  fs.readFile('./views/home.html', function (err, data) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.write(data);
    res.end();
  });

这回答了你的问题吗@但事实并非如此。即使我检查了状态码,我也会得到同样的错误。我编辑了我的初始响应以包含我的get请求,因为这可能与此有关。您正在步骤3中发送响应:
res.json(result)
。然后,您尝试再次发送另一个响应:
res.redirect('/')
。这里的预期行为是什么?@shkaper我想从数据库中获取文档,然后重定向到包含表单的主页。然后我希望能够使用显示结果数据和表单,并允许用户提交更多数据。我如何做这两个响应?@shkaper我如何确保res.json(result)在重定向之前运行?