当前位置: 首页 > news >正文

网络与请求级错误

Axios 的错误回调主要可以分为三大类:网络/请求级错误、HTTP 状态码错误(如 401、502)以及配置/取消类错误。

🌐 网络与请求级错误

这类错误发生在请求无法成功发出没有收到服务器响应时。此时,错误对象中通常没有error.response属性。

错误码 (Error Code)说明常见场景
ERR_NETWORK网络相关的通用错误网络连接中断、DNS 解析失败、CORS 策略阻止、服务器无响应等。
ECONNABORTED请求超时**(由 Axios 配置的timeout触发)**请求时间超过了timeout设定的值。
ETIMEDOUT请求超时**(操作系统/底层网络触发)**服务器长时间未响应,但可能没有超过 Axios 配置的超时时间。

📡 HTTP 状态码错误 (4xx, 5xx)

当请求成功发送,但服务器返回了一个非 2xx的 HTTP 状态码时,Axios 会将其视为错误。此时,错误对象中包含error.response对象。

  • 4xx 客户端错误:请求有问题。

    • 400 (Bad Request):请求参数错误。
    • 401 (Unauthorized):未授权,通常需要重新登录。
    • 403 (Forbidden):禁止访问,权限不足。
    • 404 (Not Found):请求的资源不存在。
  • 5xx 服务端错误:服务器处理请求时出错。

    • 500 (Internal Server Error):服务器内部错误。
    • 502 (Bad Gateway):网关错误。
    • 503 (Service Unavailable):服务不可用。
    • 504 (Gateway Timeout):网关超时。

注意,特殊情况下withCredentials: true可能导致 401 等错误被归类为ERR_NETWORK

⚙️ 配置、请求与取消错误

这类错误与请求的配置、构造过程用户主动取消有关。

  • ERR_BAD_OPTION/ERR_BAD_OPTION_VALUE: 提供给 Axios 的配置选项无效。
  • ERR_BAD_REQUEST: 请求格式有误或缺少必要参数。
  • ERR_BAD_RESPONSE: 服务器响应无法被正常解析。
  • ERR_FR_TOO_MANY_REDIRECTS: 请求重定向次数超过最大限制。
  • ERR_CANCELED: 请求被用户主动取消。
  • ERR_INVALID_URL: 提供的 URL 无效。
  • ERR_NOT_SUPPORT: 当前环境不支持该特性或方法。

💎 总结与实践

在实际开发中,可以通过检查error对象来区分错误类型并作出对应处理,例如:

axios.get('/api/data').catch(error=>{if(error.response){// 1. 服务器响应了,但状态码不是 2xxconsole.log('HTTP 错误:',error.response.status);if(error.response.status===401){/* 跳转登录 */}if(error.response.status===502){/* 提示服务暂时不可用 */}}elseif(error.request){// 2. 请求已发出,但没有收到响应 (网络层错误)console.log('网络错误:',error.code);// 可能是 ERR_NETWORK 等}else{// 3. 在发送请求前就触发了错误 (配置错误等)console.log('请求配置错误:',error.message);}});
importaxiosfrom"axios";import{MessageBox,Message}from"element-ui";importcookiefrom"js-cookie";// 创建axios实例constservice=axios.create({baseURL:"http://localhost:9001",// api的base_urltimeout:20000,// 请求超时时间});// http request 拦截器service.interceptors.request.use((config)=>{//debuggerif(cookie.get("guli_token")){config.headers["token"]=cookie.get("guli_token");}returnconfig;},(err)=>{returnPromise.reject(err);});// http response 拦截器service.interceptors.response.use((response)=>{//debuggerif(response.data.code==28004){console.log("response.data.resultCode是28004");// 返回 错误代码-1 清除ticket信息并跳转到登录页面//debuggerwindow.location.href="/login";return;}else{if(response.data.code!==20000){//25000:订单支付中,不做任何提示if(response.data.code!=25000){Message({message:response.data.message||"error",type:"error",duration:5*1000,});}}else{returnresponse;}}},(error)=>{debugger;// 网络/请求级错误、HTTP 状态码错误if(error.response){// 请求成功发送,但服务器返回了一个非 2xx 的 HTTP 状态码时,Axios 会将其视为错误。此时,错误对象中包含 error.response 对象。// 400 (Bad Request):请求参数错误。// 401 (Unauthorized):未授权,通常需要重新登录。// 403 (Forbidden):禁止访问,权限不足。// 404 (Not Found):请求的资源不存在。// 500 (Internal Server Error):服务器内部错误。// 502 (Bad Gateway):网关错误。// 503 (Service Unavailable):服务不可用。// 504 (Gateway Timeout):网关超时。if(error.response.status===401){// 401 Unauthorizedconsole.log("401 Unauthorized: 用户未授权或登录已过期。");}elseif(error.response.status===403){// 403 Forbiddenconsole.log("403 Forbidden: 用户权限不足,禁止访问。");}elseif(error.response.status===404){// 404 Not Foundconsole.log("404 Not Found: 请求的资源不存在。");}elseif(error.response.status===500){// 500 Internal Server Errorconsole.log("500 Internal Server Error: 服务器内部错误。");}elseif(error.response.status===502){// 502 Bad Gatewayconsole.log("502 Bad Gateway: 网关错误。");}elseif(error.response.status===503){// 503 Service Unavailableconsole.log("503 Service Unavailable: 服务不可用。");}elseif(error.response.status===504){// 504 Gateway Timeoutconsole.log("504 Gateway Timeout: 网关超时。");}else{console.log(`HTTP 错误: 状态码${error.response.status}, 信息:${error.response.statusText}`);}}else{// 处理网络错误// ERR_NETWORK 网络连接中断、DNS 解析失败、CORS 策略阻止、服务器无响应等// ECONNABORTED 由 Axios 配置的 timeout 触发// ETIMEDOUT 请求超时(操作系统/底层网络触发)//ECONNRESET 防火墙/安全组阻断if(error.message.includes("Network Error")){Message.error("网络错误,请检查您的网络连接。");}elseif(error.message.includes("timeout")){Message.error("请求超时,请稍后再试。");}elseif(error.message.includes("ECONNABORTED")){Message.error("请求被中止,请稍后再试。");}elseif(error.message.includes("ETIMEDOUT")){Message.error("请求超时,请稍后再试。");}elseif(error.message.includes("ECONNRESET")){Message.error("连接被重置,请检查防火墙或安全组设置。");}else{Message.error(`未知网络错误:${error.message}`);}}// 配置、请求与取消错误//这类错误与请求的配置、构造过程或用户主动取消有关。// ERR_BAD_OPTION / ERR_BAD_OPTION_VALUE: 提供给 Axios 的配置选项无效。// ERR_BAD_REQUEST: 请求格式有误或缺少必要参数。// ERR_BAD_RESPONSE: 服务器响应无法被正常解析。// ERR_FR_TOO_MANY_REDIRECTS: 请求重定向次数超过最大限制。// ERR_CANCELED: 请求被用户主动取消。// ERR_INVALID_URL: 提供的 URL 无效。// ERR_NOT_SUPPORT: 当前环境不支持该特性或方法。//处理配置错误if(error.code==="ERR_BAD_OPTION"||error.code==="ERR_BAD_OPTION_VALUE"){console.error("请求配置错误,请检查 Axios 配置。",error.message);}elseif(error.code==="ERR_BAD_REQUEST"){console.error("请求格式有误或缺少必要参数。",error.message);}elseif(error.code==="ERR_BAD_RESPONSE"){console.error("服务器响应无法被正常解析。",error.message);}elseif(error.code==="ERR_FR_TOO_MANY_REDIRECTS"){console.error("请求重定向次数超过最大限制。",error.message);}elseif(error.code==="ERR_CANCELED"){console.warn("请求被用户主动取消。",error.message);}elseif(error.code==="ERR_INVALID_URL"){console.error("提供的 URL 无效。",error.message);}elseif(error.code==="ERR_NOT_SUPPORT"){console.error("当前环境不支持该特性或方法。",error.message);}returnPromise.reject(error);});exportdefaultservice;
http://www.jsqmd.com/news/1374398/

相关文章:

  • 小芯片跑模型:预算有限时优先处理内存、延迟还是精度
  • YimMenu终极配置指南:3步快速解决菜单显示与保护功能设置
  • 如何为任天堂DS设备打造终极自定义菜单系统:TWiLight Menu++完全指南
  • CSS Scope Inline核心原理揭秘:MutationObserver如何实现无构建的样式作用域
  • 酵母单杂交 pHis2 系统到底怎么用?和 pAbAi 有什么区别?
  • Windows更新卡死怎么办?这个开源工具让你一键修复所有问题
  • pi-web数据库设计:会话数据存储的最佳实践指南
  • 终极Android Material Drawer Template指南:打造符合Material Design的导航抽屉
  • 如何快速上手hvmi?5分钟搭建你的第一个内存introspection环境
  • hvmi开发者指南:从零开始构建自定义内存监控插件
  • 不会绘制学术图有多吃亏?科研绘图帮你拉高论文质感 - 爱学习的肖博
  • ERD Online 5.0.0 迭代:聚焦建模复用、DDL 导出与登录体验,还有这些未来计划!
  • MASPreferences高级技巧:自定义工具栏样式与面板切换动画全攻略
  • tableView 相关 API 一览表
  • ai论文写作工具推荐!8款论文AI工具,让理工科图表和公式更配套 - AI论文先行者
  • 大数据时代,谁来守护你的“数字隐私”?
  • 2026年PET纺丝增韧剂靠谱供应商选型指南:合规与性能双维度解析 - 汇聚至此
  • 跨越八百公里游天坛,却败给了一场“逐客令”与冷脸
  • 2026 年呼伦贝尔汽车音响改装服务能力专项测评:舜驰车改汽车贴膜音响服务中心实地验证报告 - 优企甄选
  • 5分钟搞定自研HTTP/2服务!wastnet零依赖、免配置,快速搭建不是梦
  • 2026年涨缩分选机实力厂家直供解析 - 卓企推荐
  • vibecoding阶段,原型设计,好用的网站
  • 别再被坑了!上海小程序定制开发公司推荐指南 - 上海观智网络
  • 动态负载传输:使用peerdiscovery的PayloadFunc实现实时设备状态同步
  • 3大核心功能解密:Elasticsearch Labs如何重塑AI搜索开发体验
  • Claude Code效率模式:Fast Mode加速2.5倍的使用场景与成本分析
  • 浏览器3D建模革命:Chili3D如何颠覆传统CAD设计体验
  • vcflib高级功能探索:如何用vcf2dag构建变异图谱的有向无环图
  • 2026物业食堂保安标书制作全指南:正规服务商甄选、避坑FAQ及高口碑机构深度盘点覆盖全国 - 产业观察报
  • Spring Cache 缓存