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

MERN栈登录函数无法获取req.body,注册功能正常求助

MERN栈登录功能异常排查求助

我正在用MERN栈为应用添加认证功能,后端注册功能已正常实现,但登录函数存在异常:数据库中明确存在目标用户,用Postman测试却每次报错。尝试仅执行用户查找(不做密码验证)也会抛出错误,且确认邮箱确实存在于数据库中。

相关代码

const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs')
const asyncHandler = require('express-async-handler')
let User = require('../models/user.model')

const registerUser = asyncHandler(async (req, res) => {
    const {name, email, password} = req.body

    //validate
    if(!name || !email || !password) {
        res.status(400)
        throw new Error("Please add all fields")
    }

    const userExists = await User.findOne({email})

    if(userExists){
        res.status(400)
        throw new Error("User already exists")
    }

    //hash password
    const salt = await bcrypt.genSalt(10)
    const hashedPassword = await bcrypt.hash(password, salt)

    //create new user
    const user = await User.create({
        name : name, 
        email : email, 
        password : hashedPassword
    })

    if (user){
        res.status(201).json({
            _id: user.id,
            name: user.name,
            email: user.email 
        })
    } else {
        res.status(400)
        throw new Error("Invalid user data")
    }
})

const loginUser = asyncHandler(async (req, res) => {
    const { email, password } = req.body
  
    // Check for user email
    const user = await User.findOne({ email })
  
    if (user && (await bcrypt.compare(password, user.password))) {
      res.json({
        _id: user.id,
        name: user.name,
        email: user.email
      })
    } else {
      res.status(400)
      throw new Error('Invalid credentials')
    }
})

const getUser = asyncHandler(async (req, res) => {
    res.json("getUser")
})

router.route('/').post(registerUser)
router.route('/login').post(loginUser)

module.exports = router

Postman请求截图

Postman登录请求截图

我已检查拼写和路由均无问题,无法定位无法获取用户的原因,恳请相关指导!


排查建议

  • 确认数据库连接状态:检查Node服务启动日志,确保和MongoDB的连接正常,没有断开或权限问题
  • 核对邮箱大小写:MongoDB默认查询区分大小写,检查Postman请求的邮箱和数据库中存储的邮箱是否完全一致(包括大小写)
  • 检查User模型定义:确认user.model.js中email字段的类型为String,没有设置特殊的索引或验证规则导致查询失败
  • 添加调试日志:在loginUser函数中添加console.log('查询邮箱:', email)和console.log('查询结果:', user),查看实际查询参数和返回结果
  • 验证错误捕获逻辑:确认asyncHandler是否正确捕获了数据库查询的异步错误,可尝试直接在查询语句外包裹try/catch手动捕获异常
  • 核对路由完整路径:如果该路由文件挂载了前缀(如/api/users),Postman请求URL需包含前缀,例如POST /api/users/login

内容的提问来源于stack exchange,提问作者01nowicj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:02:03