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

Node.js登录路由输入错误凭据致应用崩溃,求代码问题排查

登录路由错误凭据导致崩溃的问题分析与修复

你的代码在输入错误凭据时崩溃的核心原因是:当用户不存在(user为undefined)时,发送错误响应后没有终止函数执行,后续代码依然会尝试访问user.password,触发Cannot read properties of undefined (reading 'password')错误。

具体来说,!user && res.status(400).json("User Not exist!");这行仅向客户端返回了错误响应,但函数并未停止运行,代码会继续执行到bcrypt.compare那一行——此时user是undefined,访问其password属性直接引发错误,导致应用崩溃。

修复方案:在发送错误响应后添加return语句,终止函数后续逻辑执行。同时建议将短路逻辑替换为更清晰的if判断,提升代码可读性:

router.post("/login", async (req, res) => {
  try {
    const user = await User.findOne({ email: req.body.email });
    if (!user) {
      return res.status(400).json("User Not exist!");
    }

    const validated = await bcrypt.compare(req.body.password, user.password);
    if (!validated) {
      return res.status(400).json("Invalid Password!");
    }

    const { password, ...others } = user._doc;
    res.status(200).json(others);
  } catch (err) {
    res.status(500).json(err);
  }
});

这样修改后,当用户不存在或密码验证失败时,发送响应后会直接终止函数,不会再执行后续可能引发错误的代码,彻底解决崩溃问题。

内容的提问来源于stack exchange,提问作者M.Zanaen Ullah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:06:17