簡體   English   中英

錯誤 [ERR_HTTP_HEADERS_SENT]:在將標頭發送到客戶端后無法設置標頭在 nodejs 中使用重定向時發生錯誤

[英]Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client error occured while using redirect in nodejs

我正在制作一個遇到此錯誤的項目。 我想做的是根據條件它應該將服務器重定向到特定的路由,但會出現這個錯誤。

routes.post("/check", (req, res) => {
  console.log("/check");
  //   console.log(req.body);
  username = req.body.username;
  password = req.body.password;
  console.log("Step 1");
  console.log("Username:", username, "\n", "Password", password);
  console.log(public);
  for (let i in public) {
    if (username === i && password === public[i]) {
      console.log("Authenticated success");
      res.redirect("/public");
    } else {
      res.redirect("/404");
    }
  }
  res.redirect("/public");
});

Output 是

/check
Step 1
Username: shivam2 
 Password 4321
{ shivam2: '4321', arjun2: 'dcba' }
Authenticated success
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

如果身份驗證成功,您應該返回:

routes.post("/check", (req, res) => {
  console.log("/check");
  //   console.log(req.body);
  username = req.body.username;
  password = req.body.password;
  console.log("Step 1");
  console.log("Username:", username, "\n", "Password", password);
  console.log(public);
  for (let i in public) {
    if (username === i && password === public[i]) {
      console.log("Authenticated success");
      return res.redirect("/public");
    } 
  }
  res.redirect("/404");
});

您正在調用多個redirect ,循環的每次迭代中都有一個,這會導致錯誤。 但是,您根本不需要循環 - 您可以直接檢查public[username] (為簡潔起見刪除了日志記錄):

routes.post("/check", (req, res) => {
  username = req.body.username;
  password = req.body.password;
  if (public[username] === password) {
    console.log("Authenticated success");
    res.redirect("/public");
  } else {
    res.redirect("/404");
  }
});

暫無
暫無

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

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