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
相关产品推荐
相关产品推荐

