You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Node.js中ERR_HTTP_HEADERS_SENT认证错误?

修复ERR_HTTP_HEADERS_SENT错误的方案

你遇到的Error [ERR_HTTP_HEADERS_SENT]是因为代码中多次向客户端发送HTTP响应。比如当找不到用户(!user)时,你发送了400的响应,但函数并没有停止执行,后续代码还会继续运行,尝试发送其他响应(比如后面的200响应),这就导致了重复设置响应头的错误。

修复步骤

  • 在发送错误响应后,必须用return终止函数的后续执行,避免代码继续运行并发送额外的响应。
  • 改用if语句替代&&简写逻辑,让代码更清晰,同时配合return确保流程终止。

修改后的代码

router.post("/login", async (req, res) => {
  try {
    const user = await User.findOne({ username: req.body.username });
    if (!user) {
      return res.status(400).json("Wrong data");
    }

    const validated = await bcrypt.compare(req.body.password, user.password);
    if (!validated) {
      return res.status(400).json("Wrong data");
    }

    const { password, ...others } = user._doc;
    res.status(200).json(others);
  } catch (err) {
    res.status(500).json(err);
  }
});

关键修改说明

  • 针对用户不存在的情况,用if (!user)判断,发送400响应后立即return,终止函数后续代码执行,避免继续执行密码验证和成功响应的逻辑。
  • 密码验证不通过时同样用return终止流程,确保每个分支只会发送一次响应,彻底解决重复设置响应头的问题。

内容的提问来源于stack exchange,提问作者Mithra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:20:25