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

Node.js报ERR_HTTP_HEADERS_SENT错误:MongoDB登录接口调试问题

解决ERR_HTTP_HEADERS_SENT错误:登录接口重复响应问题

错误原因

ERR_HTTP_HEADERS_SENT错误的核心是单次HTTP请求中发送了多个响应。你的代码里,当用户名或密码验证失败时,返回了错误响应但未终止函数执行,后续代码仍会继续运行并尝试发送另一个响应(比如res.status(200).json(user)),导致Node.js试图重复设置响应头,触发错误。同时,当用户不存在时,后续访问user.password还会引发额外的未定义错误。

修复方案

通过return终止错误分支的后续代码执行,确保每个请求只会发送一次响应;同时将逻辑改为更清晰的if判断结构,避免短路运算符带来的流程控制漏洞。

修复后的代码:

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

        const hashed = CryptoJS.AES.decrypt(user.password, process.env.USER_PASS)
        const password = hashed.toString(CryptoJS.enc.Utf8);
        // 密码不匹配时返回错误并终止流程
        if (password !== req.body.password) {
            return res.status(401).json("Wrong password");
        }
        // 验证通过,返回用户信息
        res.status(200).json(user);
    }catch(err){
         return res.status(500).json(err)
    }
})

module.exports = router

关键说明

  • 每个return res.status().json()都会终止当前函数执行,避免后续代码运行发送重复响应。
  • 使用if判断替代短路运算符(&&),让代码逻辑更直观,便于后续维护和问题排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:40:41