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

使用Axios.create调用接口返回response.data为空,直接axios.post正常

问题排查&解决步骤

1 优先检查拦截器配置

  • 确认你是否给axios.create生成的client实例单独配置了响应拦截器,如果拦截器中直接返回了response.data,那你调用postRequest拿到的res本身就是响应数据,再次取res.data就会为空
  • 确认全局axios的拦截器不会作用于自定义实例:自定义axios实例不会继承全局配置的拦截器,如果你之前全局拦截器做了响应数据的脱壳处理,自定义实例不会复用该逻辑,此时你拿到的res.data是接口返回的完整结构,需确认业务数据是否在res.data.data层级

2 对比两次请求的实际参数差异

打开浏览器控制台Network面板,对比自定义实例发起的请求和直接axios.post发起的请求的以下信息是否完全一致:

  • 请求的完整URL(确认baseURL拼接是否正确,避免斜杠重复/缺失导致请求地址错误)
  • 请求头(比如是否缺失Authorization、Cookie等鉴权字段,是否配置了withCredentials)
  • 请求体payload格式
    可以用以下代码直接打印两者的完整配置做对比:
// 打印自定义实例的请求配置和完整响应
const clientRes = await client.post('/login', body)
console.log('自定义实例完整响应:', clientRes)
console.log('自定义实例请求配置:', clientRes.config)

// 模拟和实例配置完全一致的直接调用
const directRes = await axios.post(`${BASE_URL}/login`, body, {
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
  }
})
console.log('直接调用完整响应:', directRes)
console.log('直接调用请求配置:', directRes.config)

3 检查自定义实例的额外配置

确认你的client实例有没有配置以下影响响应解析的参数:

  • 是否错误设置了responseType: 'blob'/'arraybuffer'等非json格式,导致响应解析失败
  • 是否配置了自定义的transformResponse逻辑,错误处理了响应数据
  • 若接口返回空数据,确认res.status是否为204(无内容),一般是鉴权失败/参数错误导致接口未返回内容

4 修复示例

如果确认是拦截器缺失导致需要手动脱壳,可以给自定义实例补充响应拦截器:

const client = axios.create({
  baseURL: BASE_URL,
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
  },
});

// 补充响应拦截器,和直接调用axios的表现对齐
client.interceptors.response.use(
  (response) => response.data, // 直接返回业务数据层
  (error) => Promise.reject(error)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:09:02