【Vue项目】通过设置全局的异常处理来统一处理后端返回的异常

文章目录

  • 简介
  • 方法一
    • 创建统一异常处理模块
    • 使用axios拦截器处理异常
    • 在页面中使用异常处理
  • 方法二
    • 创建全局异常处理函数
    • 在main.js中配置全局异常处理
    • 在网络请求中捕获异常
  • 方法三
    • 创建全局异常处理插件
    • 在main.js中注册全局异常处理插件
    • 在网络请求中捕获异常
  • 总结

简介

在Vue项目中,通常会遇到一些后端返回的异常,例如返回403错误表示无权限访问某个功能。对于一些共性的状态码,一个接口一次异常捕获就显得非常繁琐。为了提升用户体验,我们可以在前端统一处理这些异常,并给用户友好的提示信息。本文将详细介绍如何在Vue项目中设置全局异常处理。

本文将介绍几种处理方式,可以通过设置全局的异常处理来统一处理后端返回的异常。

方法一

创建统一异常处理模块

首先,我们需要创建一个统一的异常处理模块,用来处理所有的异常情况。可以在src目录下创建一个utils文件夹,并在其中创建一个 errorHandler.js 文件。

// errorHandler.jsexport default function errorHandler(error) {// 根据不同的错误类型进行处理if (error.response) {// 后端返回错误const { status } = error.response;if (status === 403) {// 处理权限不足的情况alert('无权限使用此功能');} else if (status === 500) {// 处理服务器内部错误alert('服务器内部错误');} else {// 处理其他错误alert('请求错误');}} else if (error.request) {// 请求发送失败alert('请求发送失败');} else {// 其他错误alert('发生错误');}
}

在这个异常处理模块中,我们首先判断异常的类型,如果是后端返回的错误,我们根据错误的状态码进行不同的处理,例如403错误表示权限不足,500错误表示服务器内部错误。如果是请求发送失败,则提示请求发送失败。其他情况下,我们给出一个通用的错误提示。

使用axios拦截器处理异常

接下来,我们需要通过axios拦截器来捕获所有的异常,并调用统一的异常处理模块进行处理。在Vue项目中,可以在 main.js 文件中设置axios的拦截器。

// main.jsimport Vue from 'vue';
import axios from 'axios';
import errorHandler from './utils/errorHandler';// 设置axios的拦截器
axios.interceptors.response.use(response => response,error => {errorHandler(error);return Promise.reject(error);}
);Vue.prototype.$http = axios;

在这个拦截器中,我们通过 axios.interceptors.response.use 方法设置了一个响应拦截器,用来处理所有的响应异常。如果发生异常,我们调用之前创建的异常处理模块进行处理,并通过 Promise.reject 方法将异常继续传递下去。

在页面中使用异常处理

最后,我们可以在具体的页面中使用异常处理。例如,在一个需要权限的功能页面,我们可以通过try-catch语句来捕获异常并进行处理。

<template><div><button @click="handleClick">点击使用功能</button></div>
</template><script>
export default {methods: {handleClick() {try {// 发送请求使用功能} catch (error) {errorHandler(error);}}}
}
</script>

在这个例子中,我们在点击按钮时调用一个方法来发送请求使用功能。在这个方法中,我们使用了try-catch语句来捕获可能发生的异常,并通过之前创建的异常处理模块进行处理。

方法二

创建全局异常处理函数

在Vue项目的 src 目录下,创建一个 utils 文件夹,并在其中创建一个 errorHandler.js 文件。在该文件中,编写全局异常处理函数。

export default function errorHandler(error) {if (error.response && error.response.status === 403) {// 处理403异常,例如提示用户无权限使用此功能console.log('无权限使用此功能');// 在此处可以使用Vue的弹窗组件显示提示信息} else {// 处理其他异常,例如提示用户请求出错console.log('请求出错');}
}

在main.js中配置全局异常处理

打开 src/main.js 文件,在文件开头的位置引入全局异常处理函数,并在Vue实例中配置全局异常处理。

import errorHandler from './utils/errorHandler';Vue.config.errorHandler = errorHandler;

在网络请求中捕获异常

在网络请求的地方(例如Vue组件的方法中),使用 try/catch 语句来捕获异常,并将异常传递给全局异常处理函数进行处理。

methods: {async fetchData() {try {// 发起网络请求const response = await axios.get('/api/data');// 处理响应数据console.log(response.data);} catch (error) {// 将异常传递给全局异常处理函数Vue.config.errorHandler(error);}}
}

通过以上步骤,我们可以在Vue项目中设置全局的异常处理。当后端返回403异常时,前端会统一处理并按照我们定义的方式进行提示,例如弹窗提示用户无权限使用此功能。其他异常也会被捕获并处理,可以根据实际需求进行相应的处理逻辑。

方法三

还有一种更加简洁的方式来设置全局异常处理,使用Vue的插件机制。下面是基于这种方式的详细解释:

创建全局异常处理插件

src 目录下,创建一个 plugins 文件夹,并在其中创建一个 errorHandler.js 文件。在该文件中,编写全局异常处理插件。

const errorHandler = (error, vm, info) => {if (error.response && error.response.status === 403) {// 处理403异常,例如提示用户无权限使用此功能console.log('无权限使用此功能');// 在此处可以使用Vue的弹窗组件显示提示信息} else {// 处理其他异常,例如提示用户请求出错console.log('请求出错');}
};export default {install(Vue) {Vue.config.errorHandler = errorHandler;Vue.prototype.$throw = (error) => errorHandler(error, this);},
};

在main.js中注册全局异常处理插件

src/main.js 文件中,引入全局异常处理插件,并使用 Vue.use() 方法注册插件。

import errorHandlerPlugin from './plugins/errorHandler';Vue.use(errorHandlerPlugin);

在网络请求中捕获异常

在网络请求的地方(例如Vue组件的方法中),使用 try/catch 语句来捕获异常,并通过 this.$throw() 方法将异常传递给全局异常处理插件进行处理。

methods: {async fetchData() {try {// 发起网络请求const response = await axios.get('/api/data');// 处理响应数据console.log(response.data);} catch (error) {// 将异常传递给全局异常处理插件this.$throw(error);}},
},

通过以上步骤,我们同样可以在Vue项目中设置全局的异常处理。当后端返回403异常时,前端会统一处理并按照我们定义的方式进行提示,例如弹窗提示用户无权限使用此功能。这样可以提升用户体验,让用户清楚地知道自己无权限使用某个功能。

总结

其他异常也会被捕获并处理,可以根据实际需求进行相应的处理逻辑。使用插件方式的好处是可以更好地封装全局异常处理逻辑,并且在多个组件中共享。

需要注意的是,异常处理模块可以根据具体的需求进行扩展和修改。例如,可以根据不同的错误类型进行不同的处理逻辑,或者将错误信息展示在页面的某个特定位置。

希望本文对你理解Vue项目中如何设置全局异常处理有所帮助!

大家还有哪些方法,大家遇到类似问题,欢迎评论区讨论,如有错误之处,敬请留言!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aps.net core 6.0 web API SwaggerUI IIS部署【23.10.15】亲测,通过

目录 一、aps.net core 6.0 web API 项目配置 创建项目设置 Swagger UI 为起始页发布项目二、在 IIS 部署 安装IIS安装 Hosting Bundle三、内网穿透 使用的是 VS2022社区版&#xff0c;WebAPI的版本是 .netcore6.0 一、aps.net core 6.0 web API 项目配置 1.创建项目 运行项目…

计算机毕业设计 基于Spring Boot智能停车计费系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

蓝桥杯 常用STL (C++) 未完待续

动态数组 有些时候想开一个数组&#xff0c;但是却不知道应该开多大长度的数组合适&#xff0c;因为我们需要用到的数组可能会根据情况变动。 这时候我们就需要用到动态数组。所谓动态数组&#xff0c;也就是不定长数组&#xff0c;数组的长度是可以根据我们的需要动态改变的。…

多模块打包报错找不到包的问题

最近做微服务项目&#xff0c;服务A&#xff0c;服务B&#xff0c;..&#xff0c;服务A依赖B&#xff0c;在idea里都可以跑起来&#xff0c;但是当打包部署到服务器时&#xff0c;懵逼了&#xff0c;各种clean package 就是不行&#xff0c;总是报找不到类或找不到包&#xff0…

软件工程与计算总结(十九)软件测试

目录 ​编辑 一.引言 1.验证与确认 2.目标 3.测试用例 4.桩与驱动 5.缺陷、错误与失败 二.测试层次 1.测试层次的划分 2.单元测试 3.集成测试 4.系统测试 三.测试技术 1.测试用例的选择 2.随机测试 3.基于规格的技术&#xff08;黑盒测试&#xff09; 4.基于代…

系统架构师备考倒计时17天(每日知识点)

一、数据库设计阶段以及相应的产物 需求分析阶段&#xff1a;数据流图、数据字典、需求说明书&#xff1b;概念结构设计阶段&#xff1a;ER模型&#xff1b;逻辑结构设计阶段&#xff1a;关系模式&#xff1b;物理设计阶段&#xff1a;包括存储结构和存取方法的物理结构。 &…

VSCode连接代理

VSCode连接代理 首先有代理 然后在设置里搜代理 然后再在windows的设置–>网络–>代理 拼接上就行 最后重启

谈谈 Redis 主从复制模式

谈谈 Redis 主从复制模式 第一次主从节点同步是全量复制 接下来&#xff0c;我在具体介绍每一个阶段都做了什么。 第一阶段&#xff1a;建立链接、协商同步 执行了 replicaof 命令后&#xff0c;从服务器就会给主服务器发送 psync 命令&#xff0c;表示要进行数据同步。 psync…

Stm32_标准库_期末设计_温度测量光照测量手机与芯片通信实现信息的更新

目录 前言&#xff1a;1.接线&效果&功能:2. 实现&#xff1a;1、手机与芯片单向通信&#xff1a;(1) 确保接收数据的完整性&#xff1a;(2) 判断传输数据的合法性&#xff1a;(3) 对数据合理的分割整合:(4) 实现过程产生的重大BUG及解决方法&#xff1a; 2、温度&光…

防火墙规则顺序解决方案

防火墙是保护网络免受攻击的第一道防线&#xff0c;防火墙对互联网和公司IT网络之间的流量拥有绝对控制权&#xff0c;防火墙规则的配置处理调节流量的关键任务。 这些规则会仔细检查传入和传出流量&#xff0c;并根据规则中提到的条件允许或阻止它&#xff0c;防火墙规则越严…

SpringCloud之Gateway整合Sentinel服务降级和限流

1.下载Sentinel.jar可以图形界面配置限流和降级规则 地址:可能需要翻墙 下载jar文件 2.引入maven依赖 <!-- spring cloud gateway整合sentinel的依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-s…

九月 Web3 游戏报告:数量增长,巨头入场,用户获取和留存仍存挑战

作者: stellafootprint.network 9 月份&#xff0c;比特币价格窄幅波动&#xff0c;小幅上涨 3.7%。Web3 游戏行业正在增长&#xff0c;但月活跃用户超过 1,000 人的游戏仍不足 10%。不同公链上的游戏分布相对稳定&#xff0c;其中 BNB 以 30.9% 的份额领先。 随着 Web3 游戏…

【算法 | 位运算No.1】leetcode268. 丢失的数字

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【Leetcode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Go语言入门心法(九): 引入三方依赖

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(八): mysql驱动安装报错onnection failed Go语言入门心法(…

Springboot 常用注解

自动装配 ComponentScan 用于配置Spring需要扫描的被组件注解注释的类所在的包。 Component 用于标注一个普通的组件类&#xff0c;它没有明确的业务范围&#xff0c;只是通知Spring被此注解的类需要被纳入到Spring Bean容器中并进行管理。 Autowired Autowired用于自动装配…

Java实现业务异步的几种方案

背景&#xff1a; 在java中异步线程很重要&#xff0c;比如在业务流处理时&#xff0c;需要通知硬件设备&#xff0c;发短信通知用户&#xff0c;或者需要上传一些图片资源到其他服务器这种耗时的操作&#xff0c;在主线程里处理会阻塞整理流程&#xff0c;而且我们也不需要等…

百度发布全新 AI 互动式搜索:百度简单搜索

本心、输入输出、结果 文章目录 百度发布全新 AI 互动式搜索&#xff1a;百度简单搜索前言主要能力 相关资料能力介绍 百度搜索升级发文告用户如何获取百度简单搜索百度简单搜索的定位百度简单搜索在 APP 上面的体验讨论和点评我们关注的几个问题 弘扬爱国精神 百度发布全新 AI…

【yolov8目标检测】使用yolov8训练自己的数据集

目录 准备数据集 python安装yolov8 配置yaml 从0开始训练 从预训练模型开始训练 准备数据集 首先得准备好数据集&#xff0c;你的数据集至少包含images和labels&#xff0c;严格来说你的images应该包含训练集train、验证集val和测试集test&#xff0c;不过为了简单说…

安防视频监控平台EasyCVR出现视频流播放卡顿情况,如何优化?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能/大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼…

A062-防火墙安全配置-配置Iptables防火墙策略

实验步骤: 【教学资源类别】 序号 类别 打勾√ 1 学习资源 √ 2 单兵模式赛题资源 3 分组对抗赛题资源 【教学资源名称】 防火墙安全配置-配置安全设置iptables防火墙策略 【教学资源分类】 一级大类 二级大类 打勾√ 1.安全标准 法律法规 行业标准 安全…