【问题标题】:Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client | NodeJS ExpressJS MySQL错误 [ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头 | NodeJS ExpressJS MySQL
【发布时间】:2021-01-25 20:06:50
【问题描述】:

我不知道该说什么,我认为代码说明了一切。我只想渲染一些东西,然后出现这个错误,但我不知道为什么。我尝试了很多来自 stackoverflow 的解决方案,以及其他我无法全部计算在内的解决方案。我正在使用 mysql2 库。请帮忙。

router.get("/:link", function(req, res){
  connection.query(
    "SELECT * FROM yourshort WHERE link = '" + req.params.link + "'",
    function (err, result, rows, fields){
      Object.keys(result).forEach(function(key) {
        var row = result[key];
        console.log(row.link)
        if(row.link = req.params.link) {
          res.send(row.link + row.views + rows.created)
          return;
        } else {
          res.send("URL does not exist")
          return;
        }
      }); 
  });
});

【问题讨论】:

  • 这是因为你在一个循环中多次调用res.send()。

标签: node.js express post


【解决方案1】:

发送数据的服务。当您尝试循环返回数据时会遇到问题。这样做的好处是在你得到所有你将从循环中得到的结果后回来。您可以为此使用异步结构。也许你可以试试这个。

router.get("/:link", (req, res) => {
  let myObject = {};

  connection.query(
    "SELECT * FROM yourshort WHERE link = '" + req.params.link + "'",
    async(err, result, rows, fields) => {
      await Object.keys(result).forEach(function(key) {
        var row = result[key];
        if(row.link = req.params.link) {
          myObject[key] = {link: row.link, views: row.views, created: rows.created} 
          return;
        } else {
          myObject['error'] = 'URL does not exist';
          return;
        }
      }); 

      await res.send(myObject);
  });


});

【讨论】:

    【解决方案2】:

    仅仅因为你在 foreach 中发送它你就会得到那个错误。

    你想只发送一次和 db 的第一项吗?如果是,请使用:

    router.get("/:link", function (req, res) {
    var i = 0;
    connection.query(
        "SELECT * FROM yourshort WHERE link = '" + req.params.link + "'",
        function (err, result, rows, fields) {
            Object.keys(result).forEach(function (key) {
                var row = result[key];
                console.log(row.link)
                if (row.link = req.params.link) {
                    if (i === 0) {
                        res.send(row.link + row.views + rows.created)
                        i = 1;
                    }
                } else {
                    if (i === 0) {
                        res.send("URL does not exist")
                        i = 1;
                    }
                }
            });
        });
    

    });

    【讨论】:

    • 感谢您的帮助,但 URL 不存在不起作用,它会永远加载。
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2020-11-01
    • 1970-01-01
    • 2020-01-23
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多