使用Axios捕获HTTP请求错误时如何获取状态码及错误信息
解决Axios请求失败时获取指定格式错误信息的问题
首先,error.response为undefined通常意味着请求没有成功到达服务器,或是服务器未返回有效响应(比如网络中断、域名解析失败、请求超时、跨域拦截等)。这种情况下需要从error对象的其他属性提取信息,再构造你需要的格式。
完整错误处理代码示例
const axios = require('axios'); axios({ url: 'https://www.icofont.cn//sd', method: 'GET', }) .then(response => { console.log(response.status); }) .catch(error => { const errorObj = { status: null, reason: '', body: '' }; // 场景1:服务器返回错误响应(存在error.response) if (error.response) { errorObj.status = error.response.status; errorObj.reason = error.response.statusText; errorObj.body = error.response.data || `${error.response.status} ${error.response.statusText}`; } // 场景2:请求已发送但无响应(如超时、网络错误) else if (error.request) { errorObj.status = error.request.statusCode || null; errorObj.reason = '请求已发送但未收到响应'; errorObj.body = error.message || '无响应内容'; } // 场景3:请求配置或代码错误 else { errorObj.reason = '请求初始化错误'; errorObj.body = error.message; } console.log(errorObj); });
关键说明
- 当
error.response存在时:直接从error.response.status(状态码)、error.response.statusText(状态描述,如"Not Found")、error.response.data(响应体)提取信息,补全目标对象。 - 当
error.response不存在时:- 优先查看
error.request:它保存了请求实例,Node.js环境下可尝试获取statusCode;浏览器环境下是XMLHttpRequest实例,可查看其状态。 - 若
error.request无法获取有效信息,直接用error.message(Axios生成的错误描述,如"Network Error"、"timeout of xxx ms exceeded")填充reason和body。
- 优先查看
适配你的格式需求
如果要严格输出类似{status: 404, reason: 'Not found', body: '404 Not found'}的格式,即使在error.response不存在的场景下,也可根据error.message解析或默认填充:比如网络错误时设置status: null, reason: '网络错误', body: '网络请求失败',域名解析失败时设置reason: '域名解析失败'等。
内容的提问来源于stack exchange,提问作者Smile
相关产品推荐
相关产品推荐

