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

ReactJS中使用axios发起请求无法获取200、400等响应状态码如何解决

核心原因

你当前在axios响应拦截器的错误回调中直接返回了error对象,这会将原本reject状态的Promise转为resolved状态,所以你在async函数中await拿到的结果可能是正常响应对象,也可能是Axios错误对象,错误状态码存放在错误对象的response.status字段中。


方案1:不修改现有拦截器,直接在调用侧判断类型

const postMyMethod = async () => {
    const result = await postMd(params)
    // 判断返回结果是否为错误对象
    if (result instanceof Error) {
        // 错误场景取response下的status
        if (result.response?.status === 400) {
            // 400对应逻辑
        }
    } else {
        // 正常响应直接取status
        if (result.status === 200) {
            // 200对应逻辑
        }
    }
};

方案2:调整拦截器逻辑(更规范,推荐使用)

修改拦截器的错误回调,不再直接返回error,而是抛出错误让Promise保持reject状态,用try catch拆分正常/异常逻辑,代码可读性更高:

修改后的拦截器代码

axios.interceptors.response.use(
  function (response) {
    if (response && response.data && response.data.Code && response.data.Message) {
      message.error(response.data.Message);
      response.data = null;
    }
    return response;
  },
  function (error) {
    if (error.response && error.response.data && error.response.data.Code && error.response.data.Message) {
      message.error(error.response.data.Message);
    } else {
      message.error('Unknown error, please check your network ~');
    }
    // 改为抛出错误,保持Promise reject状态
    return Promise.reject(error);
  }
);

对应的接口调用代码

const postMyMethod = async () => {
    try {
        const response = await postMd(params);
        if (response.status === 200) {
            // 200对应逻辑
        }
    } catch (error: any) {
        if (error.response?.status === 400) {
            // 400对应逻辑
        }
    }
};

额外优化点

你封装的通用post方法末尾的.then((resp) => resp)是冗余代码,axios.post本身就返回Promise对象,可以直接简化:

export const post = (url: string, param: any) => {
   const CancelToken = axios.CancelToken; // axios取消请求
   const source = CancelToken.source();
   post.prototype.source = source;
   return axios.post(url, qs.stringify(param), { cancelToken: source.token });
};

内容的提问来源于stack exchange,提问作者mohan m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:18:05