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

Express+MongoDB登录功能异常:进入Catch块返回服务器错误

问题描述

登录功能无法正常工作,触发catch块返回服务器错误。已确认凭证正确,能从req.body获取数据,但console.log(userr)无输出。注册功能正常,数据可存入MongoDB。相关代码如下:

const login = async (req, res) =>{
try {

    const {email, password} = req.body;
   console.log(req.body);
    const userExists = await findOne({email});
    console.log(userExists);
    if (!userExist) {
        return res.status(400).json({message: "invalid credentials"});
    }

    const userr = await bcrypt.compare(password, userExists.password);

    if (userr) {
        
        res.status(200).json({ 
        msg:"login succesfull",
        token: await userExists.generateToken(),
        userId: userExists._id.toString(),});
    }
  
    else{
        res.status(401).json({msg:"invalid email or password"});
    }

} catch (error) {
    res.status(500).json({msg:"server error "});
}
}
问题分析与解决
  • 变量名拼写错误:判断用户是否存在时用了!userExist,但前面定义的变量是userExists,少了一个s,导致ReferenceError,直接进入catch块。修正为!userExists。
  • 未指定MongoDB模型调用findOne:直接使用findOne({email})会报错,因为该方法属于MongoDB模型(比如User模型),需要改为await User.findOne({email})(需确保已导入对应的User模型)。
  • catch块未打印错误信息:当前catch块仅返回服务器错误,无法定位具体问题,建议添加console.log(error),方便调试时查看错误详情。
修正后的代码示例
// 需确保已导入User模型和bcrypt
const User = require('../models/User'); // 路径根据实际项目调整
const bcrypt = require('bcrypt');

const login = async (req, res) =>{
try {
    const {email, password} = req.body;
    console.log(req.body);
    
    // 指定模型调用findOne
    const userExists = await User.findOne({email});
    console.log(userExists);
    
    // 修正变量名拼写
    if (!userExists) {
        return res.status(400).json({message: "invalid credentials"});
    }

    const userr = await bcrypt.compare(password, userExists.password);
    console.log(userr); // 现在可以正常输出比对结果

    if (userr) {
        res.status(200).json({ 
            msg:"login succesfull",
            token: await userExists.generateToken(),
            userId: userExists._id.toString()
        });
    } else{
        res.status(401).json({msg:"invalid email or password"});
    }

} catch (error) {
    // 打印错误信息便于调试
    console.log(error);
    res.status(500).json({msg:"server error "});
}
}

内容的提问来源于stack exchange,提问作者Aashique Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:52:41