ERR_HTTP_HEADERS_SENT:无法设置 cookie

Posted

技术标签:

【中文标题】ERR_HTTP_HEADERS_SENT:无法设置 cookie【英文标题】:ERR_HTTP_HEADERS_SENT: Cannot set cookie 【发布时间】:2021-05-28 08:42:11 【问题描述】:

这是我的代码

import  Request, Response  from "express";
import  database  from "firebase-admin";

async function updatereAccessToken(
  req: Request,
  res: Response,
  db: database.Database
) 
  try 

    await db
      .ref(
        `/token/$"-MUQK0wGmrjPVBdFH7gr"/$"90417abf-b085-4072-b4ec-f009b5fe4016"`
      )
      .set("90417abf-b085-4072-b4ec-f009b5fe4016");

    
    await db
      .ref(
        `/token/$"-MUQK0wGmrjPVBdFH7gr"/$"90417abf-b085-4072-b4ec-f009b5fe4016"`
      )
      .set("90417abf-b085-4072-b4ec-f009b5fe4016");

//comments

    res.cookie("act", "tokenAuth.accessToken", 
      httpOnly: true,
      sameSite: "lax",
    );

    res.cookie("ret", "tokenAuth.refreshToken", 
      httpOnly: true,
      sameSite: "lax",
    );

    return "currentUser";
   catch (error) 

代码在评论之前有效。然后我得到错误

[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头 在 ServerResponse.setHeader (_http_outgoing.js:558:11)

将代码分成两部分

1

    await db
      .ref(
        `/token/$"-MUQK0wGmrjPVBdFH7gr"/$"90417abf-b085-4072-b4ec-f009b5fe4016"`
      )
      .set("90417abf-b085-4072-b4ec-f009b5fe4016");

    
    await db
      .ref(
        `/token/$"-MUQK0wGmrjPVBdFH7gr"/$"90417abf-b085-4072-b4ec-f009b5fe4016"`
      )
      .set("90417abf-b085-4072-b4ec-f009b5fe4016");

2

res.cookie("act", "tokenAuth.accessToken", 
          httpOnly: true,
          sameSite: "lax",
        );
    
        res.cookie("ret", "tokenAuth.refreshToken", 
          httpOnly: true,
          sameSite: "lax",
        );

这两个部分的代码分开工作,但不能一起工作。是什么原因?。

【问题讨论】:

【参考方案1】:

Error [ERR_HTTP_HEADERS_SENT] 是一个有趣的错误,当服务器尝试向客户端发送多个响应时会触发该错误。这意味着对于给定的客户端请求,服务器先前向客户端发送了响应(请求资源的成功响应或错误请求的错误响应),现在意外地尝试发送另一个响应。 这就是为什么他们分开而不是一起工作的原因。

【讨论】:

以上是关于ERR_HTTP_HEADERS_SENT:无法设置 cookie的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不断收到“错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头”错误?

Express: [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头

错误 [ERR_HTTP_HEADERS_SENT] 在将标头发送到客户端后无法设置标头

错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头

ERR_HTTP_HEADERS_SENT:在 ServerResponse 将标头发送到客户端后无法设置标头

节点 JS:错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头