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返回的实际数据内容。
解决方法
如果只是不想在控制台看到该标识,或者需要一个无原型的纯数据对象,可以采用以下方式:
通过JSON序列化/反序列化生成无原型对象
将返回对象转为JSON字符串再解析,得到的新对象不会带有原型链,控制台打印时就不会显示[[Prototype]]:.then((res)=>{ const pureData = JSON.parse(JSON.stringify(res.data)); console.log(pureData); })创建无原型对象并复制属性
使用Object.create(null)生成不继承任何原型的空对象,再把返回数据的属性复制进去:.then((res)=>{ const pureData = Object.create(null); Object.assign(pureData, res.data); console.log(pureData); })调整控制台显示设置(仅视觉隐藏)
多数浏览器控制台支持隐藏原型链展示,比如Chrome控制台可以右键对象,选择关闭原型内容显示,或者在控制台设置里调整相关选项——这只是视觉上隐藏标识,不会改变对象本身结构。
内容的提问来源于stack exchange,提问作者Areeba Junaid
相关产品推荐
相关产品推荐

