Axios发起GET请求返回数据id全为0,Postman请求正常该如何解决?
排查步骤与解决方法
你可以按以下顺序定位问题,从你提供的信息来看Postman请求响应正常,问题大概率出在前端Axios请求处理到数据落地的环节:
- 优先排查Axios响应拦截器
检查你是否在全局配置了Axios响应拦截器,常见的场景是拦截器中做字段统一转换、数据清洗、类型映射时,错误地将所有对象的id字段覆盖为了0,或者和其他同名变量冲突导致赋值错误。 - 校验响应解析逻辑
先打印原始响应文本排除Axios自动解析JSON的问题,修改你的请求代码如下:
export const fetchNotifications = (id, key) => dispatch => { dispatch( fetchNotificationsStarted() ); axios.get(uri + `/app/notifications/${id}?key=${key}`).then(result => { // 新增打印原始响应字符串,直接看接口返回的原始内容 console.log("原始响应内容:", result.request.responseText); console.log("Axios解析后数据:",result.data); dispatch( fetchNotificationsSuccess(result.data) ); }).catch(error => { dispatch( fetchNotificationsFailure(error.message) ); }); }
如果原始响应字符串里的id值正常,说明是Axios的transformResponse配置或者拦截器篡改了数据;如果原始响应里id已经是0,检查你前端请求的头信息、参数是否和Postman完全一致,是否触发了后端的特殊逻辑。
3. 排查数据二次处理逻辑
- 检查是否有自定义的类/构造函数对接收到的通知数据做实例化转换,构造函数中默认给
id赋值为0 - 检查Redux中间件是否有对
FETCH_NOTIFICATIONS_SUCCEED类型的action做特殊处理,修改了payload的值 - 确认你打印日志的时机,是否是后续其他action修改了notifications数组里的
id字段
- 额外排查点
检查是否使用了接口Mock工具、本地代理工具,这类工具可能会篡改响应内容,导致返回的字段不符合预期。
内容的提问来源于stack exchange,提问作者Joe's T
相关产品推荐
相关产品推荐

