簡體   English   中英

無法弄清楚為什么我不斷收到 [ERR_HTTP_HEADERS_SENT] 錯誤

[英]Can't figure out why I keep getting [ERR_HTTP_HEADERS_SENT] error

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 語句為假時收到錯誤。 為什么會這樣?

您正在返回內部 for 循環,因此每次它都會發送

修改您的代碼,如下所示

router.post('/', function(req, res) {
  var movies = JSON.parse(fs.readFileSync('movies.json'));
  var title = req.body.title;
  var counter =0;
  var arr = [];
  movies.forEach(function(movie) {
    if (title == movie.title) {
      arr.push({ watched: false , movieId:id})      
    } else {
      arr.push({ watched: true , movieId:id})
    }
    counter++;
   if(counter == movies.length){
      return res.send({'movie':arr});
   }
  });
});

事實證明,我需要的解決方案比我想象的要簡單得多。 我需要根據 if 語句的結果將 boolean 傳遞給渲染 function,因此我沒有調用res.render()兩次,而是創建了一個新變量來存儲 if 語句的結果,然后將其輸入res.render()所以它只被調用一次。

router.post('/', function(req, res) {
  var movies = JSON.parse(fs.readFileSync('movies.json'));
  var title = req.body.title;
  var isWatched = false;
  for (let value in movies) {
      if (movies[value].title === title) {
        isWatched = true;
      }
    }
  res.render('movie', { watched: isWatched} );
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM