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

MERN栈前端忘记密码失效 Postman正常报user not found错误

问题定位

Postman调接口正常、前端触发返回user not found,核心原因是前端请求传参格式错误,后端无法从请求体中拿到email字段,数据库查询条件匹配不到对应用户,直接返回404。
具体错误点:

  • ForgotPassword.js提交表单时构造了FormData类型对象传给action,但后端接口期望接收JSON格式参数,未做格式转换的情况下后端无法正确解析参数。
  • userAction.js中发送POST请求时,没有将参数包装为{email: 邮箱值}的标准JSON结构,也未配置正确的Content-Type请求头,同时代码缺失axios引入语句,即使参数格式正确也会报依赖错误。
  • 若后端未配置JSON请求体解析中间件,也会出现拿不到请求参数的问题。
修复方案

1. 修改ForgotPassword.js表单提交逻辑

删除多余的FormData构造代码,直接将输入的邮箱字符串传给action:

const forgotPasswordSubmit = (e) => {
  e.preventDefault();
  dispatch(forgotPassword(email));
};

2. 修改userAction.js请求逻辑

补充axios引入,配置正确的请求头和请求体结构:

// 补充缺失的axios引入
import axios from "axios";
import {
  FORGOT_PASSWORD_REQUEST,
  FORGOT_PASSWORD_SUCCESS,
  FORGOT_PASSWORD_FAIL,
  CLEAR_ERRORS
} from "../constants/userConstant";

export const forgotPassword = (email) => async (dispatch) => {
  try {
    dispatch({ type: FORGOT_PASSWORD_REQUEST });
    // 配置JSON请求头
    const config = {
      headers: {
        "Content-Type": "application/json"
      }
    }
    // 构造符合后端要求的JSON请求体
    const { data } = await axios.post(`/api/v1/password/forgot`, { email }, config);

    dispatch({ type: FORGOT_PASSWORD_SUCCESS, payload: data.message });
  } catch (error) {
    dispatch({
      type: FORGOT_PASSWORD_FAIL,
      payload: error.response.data.message,
    });
  }
};

3. 校验后端请求体解析配置

检查后端app.js文件,确认已配置JSON解析中间件,缺失则补充:

app.use(express.json());
验证

修改完成后重启前后端服务,输入数据库中已注册的邮箱提交,即可正常发送重置密码邮件,不再返回user not found错误。

内容的提问来源于stack exchange,提问作者Swarnali Ghosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:24:20