news 2026/4/16 15:34:52

Vue——Vue3 响应拦截与错误处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue——Vue3 响应拦截与错误处理

背景问题:
需要统一处理响应和错误。

方案思考:
使用响应拦截器处理错误。

具体实现:
增强的错误处理机制:

// utils/error-handler.jsimport{ElMessage,ElNotification}from'element-plus'// 错误类型映射consterrorMessages={400:'请求参数错误',401:'未授权,请重新登录',403:'拒绝访问',404:'请求资源不存在',500:'服务器内部错误',502:'网关错误',503:'服务不可用',504:'网关超时'}// 网络错误映射constnetworkErrors={'Network Error':'网络连接异常','timeout':'请求超时','Request failed with status code':'服务器响应异常'}// 错误处理类exportclassErrorHandler{// 处理 HTTP 状态码错误statichandleHttpError(status,message){consterrorMsg=errorMessages[status]||`请求错误${status}`ElMessage.error(errorMsg)// 特殊状态码处理if(status===401){// 清除用户信息,跳转登录页this.handleUnauthorized()}returnerrorMsg}// 处理网络错误statichandleNetworkError(error){letmessage='网络连接异常'if(error.message){for(const[key,value]ofObject.entries(networkErrors)){if(error.message.includes(key)){message=valuebreak}}}ElMessage.error(message)returnmessage}// 处理业务错误statichandleBusinessError(code,message){// 根据业务错误码处理switch(code){case10001:message='登录已过期,请重新登录'this.handleUnauthorized()breakcase10002:message='权限不足'breakdefault:message=message||'业务处理失败'}ElMessage.error(message)returnmessage}// 处理未授权statichandleUnauthorized(){// 清除本地存储的用户信息localStorage.removeItem('token')localStorage.removeItem('user_info')// 跳转到登录页setTimeout(()=>{window.location.href='/login'},1000)}// 显示通知staticshowNotification(title,message,type='error'){ElNotification({title,message,type,duration:3000})}}exportdefaultErrorHandler

更新请求工具以集成错误处理:

// utils/request.js (错误处理增强版)importaxiosfrom'axios'import{useUserStore}from'@/stores/modules/user'import{requestGuard}from'./request-guard'importErrorHandlerfrom'./error-handler'// 创建 axios 实例constservice=axios.create({baseURL:import.meta.env.VITE_APP_BASE_API||'/api',timeout:15000,headers:{'Content-Type':'application/json;charset=UTF-8'}})// 请求拦截器service.interceptors.request.use(config=>{// 防止重复请求if(requestGuard.hasPendingRequest(config)){constsource=axios.CancelToken.source()config.cancelToken=source.token source.cancel('重复请求')returnPromise.reject(newaxios.Cancel('重复请求'))}requestGuard.addPendingRequest(config)// 添加认证 tokenconsttoken=localStorage.getItem('access_token')if(token){config.headers['Authorization']=`Bearer${token}`}// 添加请求时间戳if(config.method==='get'){config.params={...config.params,_t:Date.now()}}returnconfig},error=>{returnPromise.reject(error)})// 响应拦截器service.interceptors.response.use(response=>{requestGuard.removePendingRequest(response.config)constres=response.dataif(res.code&&res.code!==200){ErrorHandler.handleBusinessError(res.code,res.message)returnPromise.reject(newError(res.message||'Error'))}else{returnres}},error=>{requestGuard.removePendingRequest(error.config)if(axios.isCancel(error)){console.log('请求被取消:',error.message)returnPromise.reject(error)}if(error.response){// HTTP 状态码错误ErrorHandler.handleHttpError(error.response.status,error.response.statusText)}else{// 网络错误ErrorHandler.handleNetworkError(error)}returnPromise.reject(error)})exportdefaultservice
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 22:38:23

从 MySQL 到 PG,你需要跨越的几道语法“鸿沟”

??? 直接把 MySQL 代码粘过去,生产环境竟然原地爆炸了! 别笑,根据 Stack Overflow 2024 年度的开发者调研,PostgreSQL 已经以 49% 的使用率超越 MySQL 登顶全球第一,但据不完全统计,超过 60% 的新玩家在迁移第一天就被报错信息按在地上摩擦。 连 DB-Engines 的资深分…

作者头像 李华
网站建设 2026/4/16 14:48:12

无线网络仿真:6G网络仿真_(6).MAC层仿真

MAC层仿真 1. MAC层概述 1.1 MAC层的基本功能 在无线网络中,介质访问控制(Medium Access Control, MAC)层负责管理无线资源的分配,确保多个设备能够高效、有序地共享同一无线媒介。MAC层的主要功能包括: 帧的封装与解封…

作者头像 李华
网站建设 2026/4/15 16:58:57

交通仿真软件:SUMO_(20).交通仿真优化算法

交通仿真优化算法 在交通仿真软件中,优化算法是提高仿真效果、实现高效交通管理的重要工具。本节将详细介绍如何在SUMO中应用优化算法,包括路径优化、信号控制优化、交通流量优化等方面。我们将结合具体实例,展示如何通过Python接口和SUMO的内…

作者头像 李华
网站建设 2026/4/10 23:27:59

效率翻倍:AI辅助生成开题报告PPT的实操指南

# 我的天!现在做PPT,已经变成“说人话”就能搞定的事了?> 昨天还在为PPT熬夜到三点,今天发现,只要会打字就行。真的,不夸张。我这周亲眼看着隔壁组实习生,用10分钟搞定了一份我当年要做两天的…

作者头像 李华
网站建设 2026/4/11 22:28:26

CrowdStrike以4亿美元收购浏览器安全公司Seraphic

CrowdStrike Holdings Inc. 正在收购Seraphic Security Ltd.,这是一家帮助企业保护员工浏览器免受在线威胁的初创公司。两家公司今天宣布了这项交易,但没有披露财务条款,不过Calcalist网站估计收购金额为4亿美元。Seraphic在加利福尼亚州帕洛…

作者头像 李华
网站建设 2026/4/16 14:33:15

物理AI:下一代科技前沿已悄然来临

ChatGPT在三年多前的发布引发了AI热潮。尽管AI模型持续变得更加强大,但要真正在人们的日常生活中发挥最大帮助作用,它们需要能够处理日常任务。这只有让AI走出笔记本电脑屏幕上的聊天机器人,更直接地融入我们的环境中才能实现。 行业最新热词…

作者头像 李华