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

是否需要校验axios.get()响应状态码为200?最佳实践是什么?

是否需要检查Axios.get()的响应状态码是否为200?

结论:默认场景下不需要手动校验response.status === 200

Axios的默认行为已经帮你处理了状态码的判断:

  • 当响应状态码处于2xx范围(比如200、201、204等)时,Promise会进入resolve分支(也就是try块);
  • 当状态码不在2xx范围(比如400、404、500等)时,Promise会进入reject分支(也就是catch块)。

所以你提供的第二种写法是常规的、推荐的实现方式,无需额外手动判断200状态码:

useEffect(() => {
  const fetch = async () => {
    try {
      const { data } = await axios.get('/api');
      setState(data);
    } catch (error) {
      console.error(error);
    }
  };
  fetch();
}, []);

而第一种写法存在局限性:只判断status === 200会忽略其他合法的2xx成功状态码(比如201创建资源成功、204无内容),导致这些场景下无法正确处理响应数据。


如果确实需要校验状态码,最佳实践是什么?

如果你的业务场景要求必须严格校验特定状态码(比如接口约定仅返回200代表成功),可以通过以下方式实现:

1. 针对单个请求自定义状态码校验逻辑

在请求配置中通过validateStatus选项,指定哪些状态码视为成功响应:

useEffect(() => {
  const fetch = async () => {
    try {
      const { data } = await axios.get('/api', {
        // 仅当状态码为200时,才进入try块
        validateStatus: (status) => status === 200
      });
      setState(data);
    } catch (error) {
      // 非200的状态码都会进入这里,可针对性处理
      console.error('请求状态码不符合要求', error.response.status);
      console.error(error);
    }
  };
  fetch();
}, []);

2. 全局配置统一的状态码校验规则

如果你的项目所有请求都需要严格校验200状态码,可以在Axios实例初始化时全局配置:

const axiosInstance = axios.create({
  validateStatus: (status) => status === 200
});

// 后续使用这个实例发起请求
useEffect(() => {
  const fetch = async () => {
    try {
      const { data } = await axiosInstance.get('/api');
      setState(data);
    } catch (error) {
      console.error(error);
    }
  };
  fetch();
}, []);

3. 手动校验但覆盖所有预期的成功状态码

如果不想修改Axios的默认配置,又需要校验状态码,建议判断整个2xx范围,而不是仅200:

useEffect(() => {
  const fetch = async () => {
    try {
      const response = await axios.get('/api');
      // 校验状态码是否在2xx范围内
      if (response.status >= 200 && response.status < 300) {
        setState(response.data);
      } else {
        // 处理非成功状态码
        console.error('请求失败,状态码:', response.status);
      }
    } catch (error) {
      console.error(error);
    }
  };
  fetch();
}, []);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:55:23