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

React+Node.js+Axios发送Post请求后端接收数据为undefined问题

问题原因

你的请求格式与设置的Content-Type不匹配,导致服务器无法正确解析请求体:

  • 你用JSON.stringify()把数据转成了JSON字符串,但请求头指定的是application/x-www-form-urlencoded,两种格式完全不兼容。
  • 服务器的express.json()中间件仅解析Content-Type为application/json的请求,express.urlencoded()仅解析URL编码格式的请求。当前请求的内容既不是标准URL编码格式,也没有对应正确的Content-Type,最终导致req.body为空,data1自然返回undefined。
解决方案

有两种可行修复方式,推荐第一种JSON格式方案:

方案一:使用JSON格式发送请求(推荐)

Axios默认会把JavaScript对象序列化为JSON,并自动设置Content-Type为application/json,无需手动调用JSON.stringify(),也可以省略手动设置Content-Type:

修改后的React代码:

const fireAction = (data1, data2) => {
    const data = { data1, data2 }; // 直接传递对象,无需JSON.stringify
    const url = `http://localhost:5000/data/corr/fire`;
    const config = {
        headers: {
            'Authorization': 'AUTHCODE'
        }
    }
    axios.post(url, data, config)
        .then(response => console.log(response))
        .catch(error => console.log(error));
}

fireAction("Oklahoma", "Small apartment")

服务器端中间件可简化(Express 4.16+已内置bodyParser功能):

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

方案二:使用x-www-form-urlencoded格式发送请求

如果必须使用该Content-Type,需要把数据转成URL编码格式,而非JSON字符串,可借助URLSearchParams处理:

修改后的React代码:

const fireAction = (data1, data2) => {
    const params = new URLSearchParams();
    params.append('data1', data1);
    params.append('data2', data2);
    const url = `http://localhost:5000/data/corr/fire`;
    const config = {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Authorization': 'AUTHCODE'
        }
    }
    axios.post(url, params, config)
        .then(response => console.log(response))
        .catch(error => console.log(error));
}

fireAction("Oklahoma", "Small apartment")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:50:30