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

React中Axios POST请求返回数据含[[Prototype]]: Object字段的问题

问题

使用Axios发送POST请求时,请求成功且返回数据正确,但控制台打印的res.data里多了一个[[Prototype]]: Object字段,Postman测试时不会显示这个字段。想知道Axios为什么会返回这个额外字段,以及如何去除。

React代码:

const submitHandler = (event) => {
  event.preventDefault();
  let name = event.target.name.value;
  let head = parseInt(event.target.head.value);
  console.log(name, head);
  const body = {
    name: name,
    flag: 1,
    accountNumber: 100,
    headNo: head,
    sumDebit: 0,
    sumCredit: 0,
  };
  axios
    .post("http://localhost:5000/api/accounts/create", body)
    .then((res)=>{console.log (res.data);})
    .catch((err) => console.log(err));
};

Express相关代码:

中间件配置:

app.use(cors({origin:true,credentials:false}));
app.use(express.json({ extended: true }));
app.use("/api/accounts", account_route);
app.use("/api/transaction", transaction_route);
app.use("/api/account-info", accounts_route);

响应返回方式:

res.json(reqData);
原因与解决方案

原因

[[Prototype]]: Object并不是API返回的额外字段,而是JavaScript对象的原型链标识:

  • Postman展示的是纯JSON格式数据(本质是JSON字符串解析后的无原型对象),不会显示原型链相关信息;
  • Axios会把API返回的JSON字符串解析为标准JavaScript对象,而所有JS对象默认继承自Object.prototype,控制台打印时会展示这个原型标识——它只是浏览器/Node.js控制台用来呈现对象继承关系的标记,并非API返回的实际数据内容。

解决方法

如果只是不想在控制台看到该标识,或者需要一个无原型的纯数据对象,可以采用以下方式:

  1. 通过JSON序列化/反序列化生成无原型对象
    将返回对象转为JSON字符串再解析,得到的新对象不会带有原型链,控制台打印时就不会显示[[Prototype]]:

    .then((res)=>{
      const pureData = JSON.parse(JSON.stringify(res.data));
      console.log(pureData);
    })
    
  2. 创建无原型对象并复制属性
    使用Object.create(null)生成不继承任何原型的空对象,再把返回数据的属性复制进去:

    .then((res)=>{
      const pureData = Object.create(null);
      Object.assign(pureData, res.data);
      console.log(pureData);
    })
    
  3. 调整控制台显示设置(仅视觉隐藏)
    多数浏览器控制台支持隐藏原型链展示,比如Chrome控制台可以右键对象,选择关闭原型内容显示,或者在控制台设置里调整相关选项——这只是视觉上隐藏标识,不会改变对象本身结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:40:18