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

Express项目刷新页面触发ERR_HTTP_HEADERS_SENT错误服务崩溃如何解决

问题根因

你遇到的ERR_HTTP_HEADERS_SENT错误本质是同一个HTTP请求中多次调用了响应发送方法(res.json/res.send等),导致Express重复设置响应头触发报错。结合你的代码,核心触发点是passport.js中deserializeUser函数重复调用done方法,导致同一次请求的路由逻辑被执行两次。


修复方案

1. 修复passport.js反序列化用户重复调用done的问题

原有代码同时使用回调和Promise链式调用处理用户查询,会触发两次done执行,导致后续路由/中间件逻辑被重复执行,是偶现报错的核心原因。

// 修复后的deserializeUser
passport.deserializeUser((id, done) => {
  User.findById(id)
    .then((user) => {
      done(null, user);
    })
    .catch((err) => done(err));
});

2. 修复LocalStrategy密码错误的返回逻辑

原有代码密码错误时返回done(null, true),会把布尔值true当做用户对象传入后续登录逻辑,不符合Passport的设计规范。

// 密码校验分支修复
if (isValid) {
  console.log("Logged in");
  return done(null, user);
} else {
  console.log("Wrong Password");
  return done(null, false, { msg: '密码错误' });
}

3. 修复index.js根路由查询逻辑冲突问题

原有代码同时给Mongoose查询传入回调又接.then,会导致查询结果被重复处理,存在逻辑隐患。

// 修复后的根路由
router.get("/", isAuth, (req, res) => {
  User.find({})
    .then((users) => {
      const userMap = {};
      users.forEach(user => {
        userMap[user._id] = user;
      });
      res.status(200).json({ user: req.user, auth: true, response: userMap });
    })
    .catch((err) => {
      console.log(err);
      res.sendStatus(500);
    });
});

4. 修复App.js session配置错误

原有session配置中cookie字段嵌套了多余的cookie对象,属于配置错误:

// 修复后的session cookie配置
cookie: {
  secure: false,
  maxAge: 1000 * 60 * 60 * 24,
}

5. 可选优化:注册路由等待数据库操作完成再返回

原有代码不等用户保存完成就直接返回200,可能出现数据库写入失败但前端收到成功响应的问题:

router.post("/register", async (req, res) => {
  const saltHash = genPassword(req.body.repeatPassword);
  const newUser = new User({
    username: req.body.firstInput,
    fName: "",
    lName: "",
    title: "",
    hash: saltHash.hash,
    salt: saltHash.salt,
  });
  try {
    await newUser.save();
    res.sendStatus(200);
  } catch (err) {
    console.log(err);
    res.sendStatus(500);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:24:04