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
相关产品推荐
相关产品推荐

