Express认证报错internal/errors:464,登录失败时服务器崩溃求助
Express登录认证失败触发internal/errors:464错误的解决办法
问题根源
你的代码在认证失败场景下没有终止函数执行,导致后续代码访问了undefined的属性:
- 当用户不存在时,
!user && res.status(400).json("Wrong credentials!")仅发送了错误响应,但函数仍会继续执行 - 后续执行
bcrypt.compare(req.body.password, user.password)时,user是undefined,访问user.password会抛出TypeError,最终触发服务器崩溃
修复方案
在发送错误响应后终止函数执行,避免后续代码访问不存在的属性。可以通过以下方式实现:
修改后的代码
exports.loginUser = async (req, res) => { try { const user = await User.findOne({ username: req.body.username }); if (!user) { return res.status(400).json("Wrong credentials!"); } const validated = await bcrypt.compare(req.body.password, user.password); if (!validated) { return res.status(400).json("Wrong credentials!"); } const { password, ...others } = user._doc; res.status(200).json(others); } catch (err) { res.status(500).json(err); } };
关键说明
- 原代码中
!user && res.status(...)的写法只会发送响应,但不会停止函数执行,后续依赖user的代码依然会运行 - 通过
return终止函数,确保认证失败时不会执行后续可能报错的代码
内容的提问来源于stack exchange,提问作者Mr. ZESAN
相关产品推荐
相关产品推荐

