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

