无法弄清楚为什么我不断收到[ERR_HTTP_HEADERS_SENT]错误

时间:2019-10-09 05:12:26

标签: javascript node.js express http-headers

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

我看过其他有关此问题的文章,但无法弄清楚如何解决我的问题。我有这样的代码来处理发布请求:

router.post('/', function(req, res) {
  var movies = JSON.parse(fs.readFileSync('movies.json'));
  var title = req.body.title;
  movies.forEach(function(movie) {
    if (title == movie.title) {
      return res.render('movie', { watched: false });
    } else {
      return res.render('movie', { watched: true });
    }
  });
});

我知道问题是由于res.render()两次出现,但即使使用了return语句,它仍然给我相同的错误,因此我很难理解它是如何两次发送的。

是不是由于return关键字而只发送一次?

此外,如果我这样修改我的代码:

router.post('/', function(req, res) {
  var movies = JSON.parse(fs.readFileSync('movies.json'));
  var title = req.body.title;
  movies.forEach(function(movie) {
    if (title == movie.title) {
      return res.render('movie', { watched: false });
    }
  });
res.render('movie', { watched: true});
});

然后,当if语句为false时,我只会收到错误。为什么会这样呢?

2 个答案:

答案 0 :(得分:1)

您将返回for循环内部,因此每次它将发送

按如下所示修改代码

obect

答案 1 :(得分:0)

结果证明,我需要的解决方案比我想的要简单得多。我需要根据if语句的结果将一个布尔值传递给render函数,因此,我没有创建两次新的变量来存储if语句的结果,而是将其馈送到{中,而不是两次调用res.render() {1}},因此只被调用一次。

res.render()