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

Axios封装函数将200成功响应抛入catch而非then的问题排查

Axios封装后200响应进入catch的原因分析

你采用第二种Axios封装方式时,出现200状态码的成功响应进入catch而非then的情况,可能的原因如下:

  • 响应数据解析失败
    Axios默认会自动解析JSON格式的响应数据,如果后端返回的200响应数据存在JSON语法错误(比如缺少括号、引号不匹配),Axios解析失败会直接触发catch。可以在catch中打印err.response,查看完整的响应内容,确认是否是解析问题。

  • 修改了validateStatus判定规则
    Axios默认以status >= 200 && status < 300作为成功响应的判定标准。如果你的全局Axios配置或当前请求中修改了validateStatus函数,导致200状态码不被判定为成功,就会进入catch。比如误写的配置:

axios.defaults.validateStatus = (status) => status === 201; // 仅201视为成功

检查是否存在这类自定义判定逻辑。

  • URL拼接格式错误
    第二种封装中直接拼接config.baseURL + options.url,如果config.baseURL结尾带斜杠、options.url开头也带斜杠,会生成https://xxx.com//path这类异常URL。部分服务器虽能返回200,但可能触发Axios内部的异常处理逻辑,导致进入catch。对比第一种用axios.create的方式,Axios会自动处理斜杠拼接,不会出现这类问题。

  • 拦截器抛出异常
    如果全局或当前请求的响应拦截器中存在业务逻辑判断,哪怕状态码是200,只要不符合业务规则就抛出错误,也会进入catch。比如:

axios.interceptors.response.use(
  res => {
    if (res.data.code !== 200) { // 假设业务码非200视为错误
      throw new Error('业务异常');
    }
    return res;
  },
  err => Promise.reject(err)
);

检查是否有这类拦截器逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:12:46