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

登录输入错误密码触发ERR_HTTP_HEADERS_SENT致应用崩溃求助

解决Error [ERR_HTTP_HEADERS_SENT]错误:登录密码错误时应用崩溃问题

错误原因

这个错误本质是同一个HTTP请求中多次向客户端发送响应。当用户名不存在或密码错误时,你的代码发送了401错误响应,但没有终止后续逻辑,继续执行到最后又发送了200成功响应,导致HTTP响应头被重复设置,最终触发应用崩溃。

修复方案

修改登录路由中的判断逻辑,在发送错误响应后立即终止代码执行,避免后续重复发送响应。

修复后的完整代码

const router = require("express").Router();
const User = require("../models/User");
const CryptoJS = require("crypto-js");
const jwt = require("jsonwebtoken");

//REGISTER
router.post("/register", async (req, res) => {
  const newUser = new User({
    username: req.body.username,
    email: req.body.email,
    password: CryptoJS.AES.encrypt(
      req.body.password,
      process.env.SECRET_KEY
    ).toString(),
  });
  try {
    const user = await newUser.save();
    res.status(201).json(user);
  } catch (err) {
    res.status(500).json(err);
  }
});

//LOGIN
router.post("/login", async (req, res) => {
  try {
    const user = await User.findOne({ email: req.body.email });
    // 用户不存在时返回错误并终止执行
    if (!user) {
      return res.status(401).json("用户名或密码错误!");
    }

    const bytes = CryptoJS.AES.decrypt(user.password, process.env.SECRET_KEY);
    const originalPassword = bytes.toString(CryptoJS.enc.Utf8);

    // 密码不匹配时返回错误并终止执行
    if (originalPassword !== req.body.password) {
      return res.status(401).json("用户名或密码错误!");
    }

    const accessToken = jwt.sign(
      { id: user._id, isAdmin: user.isAdmin },
      process.env.SECRET_KEY,
      { expiresIn: "5d" }
    );

    const { password, ...info } = user._doc;

    res.status(200).json({ ...info, accessToken });
  } catch (err) {
    res.status(500).json(err);
  }
});

module.exports = router;

关键修改点

  • 将原来的短路逻辑(!user && res.status(...))替换为if判断+return,确保发送错误响应后立即终止后续代码执行
  • 密码验证逻辑同理,验证失败时发送响应并return,避免执行到后续的成功响应代码

这样修改后,当登录验证失败时,代码会在发送错误响应后停止执行,不会再尝试发送成功响应,彻底解决重复设置HTTP头导致的崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:15:31