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

