【问题标题】:Unable to send object in Express response无法在 Express 响应中发送对象
【发布时间】:2017-12-07 18:48:02
【问题描述】:

我正在尝试使用 res.send 将数据库中的所有数据发回,但它给我一个错误。在我的前端,我调用端点select 并尝试返回数据库中的所有行和数据。

app.get('/select', function (req, res) {
    con.query('SELECT * FROM Contracts', function (err, rows, fields) {

    if (err) {
      console.log(`Error: ${err}`);
    }

    for (var i = 0; i < rows.length; i++) {
      var row = rows[i];
      res.send(row);
    }
  })
});

【问题讨论】:

  • 尽量不要将您的响应包装在 for 循环中。将所有行累积到一个对象中并发送一次。
  • 为什么不直接发送整个rows 数组?

标签: javascript rest express


【解决方案1】:

您应该使用res.write 而不是res.send,因为后者会终止函数(在第一次使用res.send 后不会执行任何操作)

app.get('/select', function (req, res) {
    con.query('SELECT * FROM Contracts', function (err, rows, fields) {

    if (err) {
      console.log(`Error: ${err}`);
    }

    for (var i = 0; i < rows.length; i++) {
      var row = rows[i];
      res.write(row);
    }
    res.end(); //this finally sends the response
  })
});

或者如果你想使用res.send 发送整个rows 数组:

app.get('/select', function (req, res) {
    con.query('SELECT * FROM Contracts', function (err, rows, fields) {

    if (err) {
      console.log(`Error: ${err}`);
    }

    res.send(rows);
  })
});

【讨论】:

  • res.write 在哪里写信呢?我都试过了,我一直收到这个错误。错误:发送后无法设置标头。
  • 它写入一个匿名对象,并通过 res.end 发送给用户,该错误发生在哪一行?
  • 它在不相关的模块中抛出错误。 node_modules/mysql/lib/protocol/Parser.js:80 抛出错误; // 重新抛出非 MySQL 错误
猜你喜欢
  • 2017-06-26
  • 2018-10-10
  • 2019-03-10
  • 1970-01-01
  • 2018-11-26
  • 2022-06-23
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多