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

Postman中POST请求正常 浏览器React提交MongoDB时FormData为空

问题根源
  • 核心配置冲突:你提交的请求体是FormData格式,但请求头强制指定了Content-Type: application/json,后端按照JSON格式解析请求体时无法识别FormData结构,导致所有字段读取为空,触发MongoDB的必填校验报错。
  • Axios序列化规则限制:Axios不会自动将FormData实例序列化为JSON格式,直接传入FormData给JSON类型的请求,实际提交的是空对象,后端自然读不到字段值。
解决方案

方案1:纯文本字段场景直接用JSON提交(推荐)

你的表单只有普通文本字段,不需要用到FormData,直接提交普通JS对象即可,和你Postman测试的提交格式完全一致。
修改CreateUser.js的submitHandler方法:

const submitHandler = (e) => {
  e.preventDefault(); 
  // 直接构造普通JS对象,无需FormData
  const userData = {
    firstName,
    lastName,
    email
  };
  dispatch(createNewUser(userData));
};

UserActions.js的现有配置无需修改,即可正常请求。

方案2:需要保留FormData场景(如后续要上传文件)

如果你需要用FormData承载文件等二进制内容,修改UserActions.js的请求配置:

  1. 删除手动设置的Content-Type: application/json,Axios会自动识别FormData实例,自动设置正确的multipart/form-data请求头,且会自动携带boundary分隔符参数,手动设置请求头会丢失该参数导致解析失败。
  2. 确保后端已配置multipart/form-data格式的解析中间件(如Express生态的multer)。

修改后的UserActions.js代码:

export const createNewUser = (userData) => async (dispatch) => {
  try {
    // 移除手动设置的Content-Type,由Axios自动处理
    const { data } = await axios.post("/api/v1/user/new", userData);

    dispatch({
      payload: data
    });
  } catch (error) {
    console.log(error.response);
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:27:03