axios请求的catch方法回调传入的error参数是否为布尔值?
axios catch 回调的error参数结构
catch接收的error对象在不同错误场景下包含的字段有区别,核心字段如下:
error.response:请求已成功发出、服务器返回非2xx范围状态码时存在,包含3个核心子字段:data:服务器返回的错误响应体,结构和正常请求的response.data一致status:HTTP状态码,常见的如404、500、401等headers:服务器返回的响应头
error.request:请求已发出但未收到服务器任何响应时存在,常见场景如跨域被拦截、网络断开、请求超时,浏览器环境下该字段是XMLHttpRequest实例error.message:所有错误场景都存在的文本提示,比如"Network Error"、"Request aborted"这类直观错误说明error.config:所有错误场景都存在,存储发起请求时传入的所有配置项,用于定位出错的请求
axios请求核心原理
axios本质是对不同环境底层请求能力的Promise封装,浏览器环境基于XMLHttpRequest实现,Node环境基于http/https模块实现,完整请求流程如下:
- 调用
axios.get()时,首先合并传入的请求配置和全局默认配置,生成最终请求配置对象 - 执行预先配置的请求拦截器,可在该阶段统一修改请求头、注入鉴权token等
- 根据运行环境调用对应的底层请求方法发起真实网络请求
- 收到响应后先执行预先配置的响应拦截器,可在该阶段统一处理异常状态码、格式化返回数据
- 如果响应状态码符合
validateStatus配置的校验规则(默认是200-299区间),则进入then回调,否则进入catch回调 - 若请求过程中出现网络异常、请求超时、主动取消请求等情况,也会直接进入
catch回调
代码优化建议
你提供的代码有两处可优化的点:
- 拼写问题:
responce应为response,符合通用命名规范 - catch回调建议做分级处理,更便于排查问题:
axios.get('https://jsonplaceholder.typicode.com/posts') .then(response => { console.log(response) this.setState({ posts : response.data }) }) .catch(error => { if (error.response) { // 服务器返回错误状态码 console.log('服务器错误:', error.response.status, error.response.data) } else if (error.request) { // 未收到服务器响应 console.log('网络异常:', error.request) } else { // 配置错误导致请求未发出 console.log('请求配置错误:', error.message) } console.log('出错请求配置:', error.config) })
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

