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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:15:42