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

无法获取Axios请求错误状态:status为undefined的技术问询

问题

在React前端使用Axios调用后端API时,希望通过HTTP错误状态码给用户精准反馈,但捕获到的错误对象明明包含status字段,直接访问e.status却返回undefined。

请求函数代码

export const createBlog = async (token, workspaceId, userInputMetaData) => {
  log.info("Create blog.");
  const result = await axios.post(
    process.env.REACT_APP_API_URL + "/workspaces/" + workspaceId + "/blogs",
    userInputMetaData,
    {
      headers: { Authorization: `Bearer ${token}` }
    }
  );
  return result.data;
};

调用及错误捕获代码

const generateBlog = async () => {
    try {
      const token = await auth.getAccessTokenSilently({});
      const blog = await createBlog(token, workspaceStore.workspaces[0].id, userInputMetaData);
    } catch (e) {
      log.error(e.message)
      log.error(e.status)
      log.error(JSON.stringify(e))
    }
}

控制台输出

Request failed with status code 402

undefined

{  
"message": "Request failed with status code 402",  
"name": "AxiosError",  
"config": {    
  "transitional": {      
    "silentJSONParsing": true,     
     "forcedJSONParsing": true,      
     "clarifyTimeoutError": false    
  },    
  "transformRequest": [      null    ],    
  "transformResponse": [      null    ],    
  "timeout": 0,    
  "xsrfCookieName": "XSRF-TOKEN",    
  "xsrfHeaderName": "X-XSRF-TOKEN",    
  "maxContentLength": -1,    
  "maxBodyLength": -1,    
  "env": {      "FormData": null    },    
  "headers": {      
    "Accept": "application/json, text/plain, */*",      
    "Content-Type": 
    "application/json",      
    "Authorization": "Bearer ..."    
  },    
  "method": "post",    
  "url": "...",    
  "data": "..."  
},  
"code": "ERR_BAD_REQUEST",  
"status": 402
}

原因分析

Axios抛出的AxiosError对象中,status字段并不是直接挂载在错误对象本身,而是嵌套在e.response属性里。用JSON.stringify(e)输出时会序列化整个对象的可枚举属性,包括response中的status,所以能看到该字段,但直接访问e.status自然找不到。

需要注意:只有当请求已发送到服务器且服务器返回错误响应时,e.response才会存在;如果是请求未到达服务器就失败(比如网络错误),e.response会是undefined,需要额外判断这种情况。

正确访问status的方法

修改错误捕获逻辑,从e.response.status中获取状态码,同时处理无响应的异常情况:

const generateBlog = async () => {
    try {
      const token = await auth.getAccessTokenSilently({});
      const blog = await createBlog(token, workspaceStore.workspaces[0].id, userInputMetaData);
    } catch (e) {
      log.error(e.message);
      // 正确获取状态码
      if (e.response) {
        // 服务器返回了错误响应
        log.error(e.response.status);
        // 还可获取服务器返回的错误详情:e.response.data
      } else {
        // 请求未到达服务器,比如网络错误
        log.error("请求失败:网络错误或服务器无响应");
      }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:29:55