首页 > 其他分享 >vue3统一封装axios

vue3统一封装axios

时间:2024-08-02 16:20:27浏览次数:9  
标签:axios const errTitle err code bkResponse vue3 封装

1.在src下新建文件夹apis 在apis下新建一个index.ts
2.在index.ts添加
import axios from 'axios';
export const httpInstance = axios.create();
3.在终端输入 npm run lint 确定文件没有问题
4.定义并导出一个后端的数据类型
export type BkResponse = {
data: any;
code: number;
message: string;
succeed: true;
};
5.设置请求根路径(VITE_BASEURL是.env.dev下的)

6.响应拦截器
意义:响应拦截器发送请求后接收到服务器响应之前的一个拦截器,它可以对服务器返回的数据进行统一的处理(如:对返回的数据进行格式化、错误处理、权限验证等)
如果在这里不进行统一的处理之后我们每发一次请求都要处理一次,非常麻烦,这是一直优化代码的表现
//配置相应拦截器

export const $http = async (config: AxiosRequestConfig) => {
    //封装带loading的请求
    const loadingInstance = ElLoading.service();
    try {
        const axiosResponse = await httpInstance<BkResponse>(config);
        const bkResponse = axiosResponse.data
        if (!bkResponse?.succeed) {
            let errTitle: string = 'Error';
            if (bkResponse.code === 401) {
                errTitle = 'Unauthorized'
                ElMessage.error('未授权')

            } else if (bkResponse.code === 403) {
                errTitle = 'Forbidden'
            }
            else if (bkResponse.code === 9999) {
                errTitle = '9999Error'
            } else if (bkResponse.code === 500) {
                errTitle = 'ServerError'
            } else {
                errTitle = 'Unknown'
            }
            const err = new Error(bkResponse?.message || 'Unknown');
            err.name = errTitle
            throw err;
        }
        return bkResponse
    } catch (err) {
        if (err instanceof AxiosError) {
            ElMessage.error('网络错误')
        }
        throw err;
    }
    finally{
        loadingInstance.close();
    }
}

标签:axios,const,errTitle,err,code,bkResponse,vue3,封装
From: https://www.cnblogs.com/zhishizongjie/p/18338984

相关文章

  • Java SE核心技术——7封装
    封装的概述对外部隐藏内部细节1、封装的目的是隐藏对象的内部状态和实现细节,只暴露出一个可以被外界访问和操作的接口。通过将类的属性设置为私有(private),防止外部直接访问和修改这些属性。2、好处:高内聚低耦合(面向对象设计的最高原则)(1)隐藏事物的实现细节降低使用难度(2)提高了......
  • Vue3+elementplus遇到的常见问题
    1.跳转同一个路由的时候,只是参数不一样页面不刷新,不会执行onMounted尝试多种方案,包括watch等最终解决方案:router-view设置key属性为路由的完整路径<keep-alive><router-view:key="$route.fullPath"></router-view></keep-alive>eg:左侧菜单是接口返回的  默......
  • Flutter 插件之http(介绍、使用、二次封装)
    背景在我们日常开发过程中,经常会使用到网络请求,而在Flutter插件中,最常用的请求插件一共两个,分别是:1、dio2、http其中dio我已经做过详细介绍了(post、get等请求、文件上传、请求重试等),这里就不做过多阐述,下面附上文章链接,如有需要可前往查看。https://blog.csdn.net/WangQin......
  • 鸿蒙 HarmonyOS PullToRefresh下拉刷新二次封装
    ✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向)......
  • vue3 ref和reactive原理区别
    概述ref是通过一个中间对象RefImpl持有数据,并通过重写它的set和get方法实现数据劫持的,本质上依旧是通过Object.defineProperty对RefImpl的value属性进行劫持。reactive则是通过Proxy进行劫持的。Proxy无法对基本数据类型进行操作,进而导致reactive在面对基本数据类型时的束......
  • 封装,private关键字,this关键字
    我们上一个案例,使用private关键字将成员进行修饰,外界无法直接访问,讲了那么长时间,实际上就是在传输一个思想面向对象编程的三大特征,第一大特征:封装封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。private关键字:1、被private修饰的成员,外......
  • Vue Hook 封装图片懒加载通用业务
     一、什么是图片懒加载图片懒加载(LazyLoading)是一种在用户需要的时候(通常是滚动到可视区域)才加载图片的技术。通过这种方式,可以减少页面的初始加载时间,减少带宽消耗,提高用户体验。二、Vue中使用IntersectionObserver实现图片懒加载IntersectionObserver是一个现代浏览器......
  • Vue Hook 封装通用型表格
    一、创建通用型表格的需求实现一个通用型表格组件,具备以下功能:动态列配置。分页功能。排序功能。可扩展的行操作功能。二、设计通用型表格组件首先,需要设计一个基础的表格组件,它接受列配置、数据和分页信息等参数。1.创建useTableHook在src/hooks目录下创建useTa......
  • 小程序http封装
    constui=require('./ui');constBASE_URL='http://119.23.227.211:8011'/***网络请求request*obj.data请求接口需要传递的数据*obj.showLoading控制是否显示加载Loading默认为false不显示*obj.contentType默认为application/json*obj.method请求......
  • 封装Echarts组件
    构建配置文件,按需引入相关组件//echarts.config.js//*需要哪些组件和配置,请在import时手动添加。import*asechartsfrom'echarts/core';//引入用到的图表import{BarChart,PieChart}from'echarts/charts';//引入提示框、数据集等组件import{DataZoomCo......