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

使用React Fetch发送POST请求,Node/Express后端返回空对象?

React Fetch POST请求后端返回空对象的解决方案

兄弟,我刚踩过一模一样的坑!先给你上修正后的代码,再给你拆解问题出在哪:

修正后的React请求代码

handleSubmit(e) { 
  e.preventDefault(); 
  const { email } = this.state; 
  fetch('/api/login', { 
    method: 'POST', 
    headers: { 'Content-Type':'application/json' }, 
    // 重点1:把JS对象转成JSON字符串
    body: JSON.stringify({ "email": email }) 
  })
  // 重点2:处理Fetch返回的Promise
  .then(res => res.json())
  .then(data => {
    console.log("后端返回的数据:", data);
    // 这里可以加登录成功后的逻辑,比如跳转到首页、存token
  })
  .catch(err => {
    console.error("请求出错啦:", err);
  }); 
  console.log("当前输入的邮箱:", email) 
}

问题根源拆解

你的后端代码是没问题的(Postman能正常返回就说明body-parser配置正确),问题全在React的Fetch请求里:

1. 忘记序列化请求体

当你设置headers: { 'Content-Type':'application/json' }时,后端的bodyParser.json()是专门解析JSON格式字符串的,但你直接传了一个JS对象{ "email": email }。Fetch会把这个对象默认转成[object Object]这种无效字符串,后端根本解析不出内容,自然只能拿到空对象{}。

用JSON.stringify()把JS对象转成标准JSON字符串,后端就能正常解析了。

2. 未处理Fetch的Promise链

Fetch API是异步的,返回的是一个Promise对象。如果不通过.then()链式调用处理这个Promise,不仅拿不到后端返回的数据,还可能导致请求没有完整执行(比如某些浏览器会因为Promise未处理而中断请求)。加上.then()既能处理响应数据,还能通过.catch()捕获请求过程中的错误,方便你调试。

验证方法

你可以打开浏览器的开发者工具(F12 → Network标签),查看这次POST请求的Payload:

  • 修正前:Payload显示[object Object]
  • 修正后:Payload显示正确的JSON字符串{"email": "你输入的邮箱地址"}

这时候再看后端控制台,console.log(req.body)就能正常打印出邮箱数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:13:05