anxios封装拦截器的两种方式

1. 函数方式

import axios, { AxiosInstance, AxiosRequestConfig } from "axios";
import { Message } from "view-ui-plus";export const createAxiosByinterceptors = (config?: AxiosRequestConfig
): AxiosInstance => {const instance = axios.create({timeout: 1000, //超时配置withCredentials: true, //跨域携带cookie...config, // 自定义配置覆盖基本配置});// 添加请求拦截器instance.interceptors.request.use((config: any) => {// 在发送请求之前做些什么console.log("config:", config);return config;},(error) => {// 对请求错误做些什么return Promise.reject(error);});// 添加响应拦截器instance.interceptors.response.use((response) => {// 对响应数据做点什么console.log("response:", response);const { code, data, message } = response.data;if (code === 200) return data;else if (code === 401) {// 退出处理} else {Message.error(message);return Promise.reject(response.data);}},(error) => {// 对响应错误做点什么console.log("error-response:", error.response);console.log("error-config:", error.config);console.log("error-request:", error.request);if (error.response) {if (error.response.status === 401) {// 退出处理}}Message.error(error?.response?.data?.message || "服务端异常");return Promise.reject(error);});return instance;
};

使用方法

import { createAxiosByinterceptors } from "@/service/service";const request = createAxiosByinterceptors({baseURL: "/sdkjfdk",
});//lodaing配置
export const appList = (params: any): Promise<any> =>request.get("/app", { params, loading: true }); // 不需要默认的全局loading效果可配置loading为false关闭 loading默认为true// 文件下载
export const exportGoods = (data: any) =>request.post("/export", data, {responseType: "blob",});export const expordtGoods = (data: any) =>request.put("/export", data, {responseType: "blob",});

讲解:函数式通过调用方法创建axios实例,通过参数传入基础url,超时时间等定义参数。
使用时比较接近axios写法。

2. 类方法

import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
import { Message } from 'view-design';
const $Message: any = Message;
export class HttpService {private instance: AxiosInstance;baseConfig: AxiosRequestConfig = { baseURL: "/commonApi" };constructor(baseURL?: string, timeout?: number) {// 使用axios.create创建axios实例this.instance = axios.create({ ...this.baseConfig, baseURL, timeout });// 请求拦截器this.instance.interceptors.request.use((config: AxiosRequestConfig) => {return config;}, (error: any) => {return Promise.reject(error);})// 响应拦截器this.instance.interceptors.response.use((response: AxiosResponse) => {if (response.request.responseType === 'blob') { // 流文件return response}const { retcode, code, status, message, msg, desc } = response.data;let msgStr = message || msg || desc || '系统异常,请联系管理员';if ((retcode && retcode === 200) || (code && code === 0)) {return Promise.resolve(response.data);} else if (!status) {return Promise.resolve(response.data);} else {$Message.error(msgStr);return Promise.reject(response.data);}}, (error: any) => {const { status, data } = error.responseconst { msg, message, desc } = dataconst errMsg = msg || message || desc || '系统异常,请联系管理员';switch (status) {case 401:// 这里可以做清空storage并跳转到登录页的操作case 400:case 403:case 404:case 408:case 500:case 501:case 502:case 503:case 504:case 505:default:$Message.error(errMsg);}return Promise.reject(error);})}/*** commonRequest*/public commonRequest(config: AxiosRequestConfig): Promise<AxiosResponse> {return this.instance(config)}
}

使用方法

import { HttpService } from '../interceptors'const proxyPrefix: string = '/proxyApi';
const $docQaReq: any = new HttpService(proxyPrefix)export const apiUrl = {docFileUpload: `${proxyPrefix}/doc/semantic-doc/document/file/upload`,
}/*** @description 获取所有文档库标签(以及文档* @param type 1 为文档标签,不传则为文档库标签*/
export const getAllLibLabel = (data?: {type: number;
}) => {return $docQaReq.commonRequest({url: `/doc/semantic-doc/label/list`,method: 'get',params: data? data: null})
}/*** @description 新增文档库标签(以及文档* @param type 1 为文档标签,不传则为文档库标签*/
export const creatLibLabel = (data: {name: string;type?: number;
}) => {return $docQaReq.commonRequest({url: '/doc/semantic-doc/label/create',method: 'post',data})
}

类方法: 通过创建一个类,传入baseUrl,超时时间等自定义参数。使用时候调用类的方法实现创建axios实例。
两种方法写法不同,功能相同。

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

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

相关文章

LeetCode 每日一题 Day 45(Hard) || 数位DP

2719. 统计整数数目 给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2 min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答…

2.6、云负载均衡产品详述

一、定义 弹性负载均衡(Elastic Load Balance&#xff0c;简称ELB)可将来自公网的访问流量分发到后端云主机&#xff0c;可选多种负载均衡策略&#xff0c;并支持自动检测云主机健康状况&#xff0c;消除单点故障&#xff0c;保障应用系统的高可用。 二、产品架构 1&am…

知识笔记(八十二)———链式语句中distinct和lock用法

DISTINCT 方法用于返回唯一不同的值 。 例如数据库表中有以下数据 以下代码会返回user_login字段不同的数据 Db::table(think_user)->distinct(true)->field(user_login)->select();生成的SQL语句是&#xff1a; SELECT DISTINCT user_login FROM think_user 返回…

APM链路监控: Linux 部署 pinpoint

目录 一、实验 1.环境 2. 准备 3.HBase单机部署 4.pinpoint部署 二、问题 1.pinpoint有哪些功能 2.pinpoint架构是如何组成的 3.Linux中自带的jdk 如何设置JAVA_HOME 4. hbase启动报错 5.hbase的master启动失败 6.JPS命令如何安装和使用 一、实验 1.环境 &#x…

Ansible Filter滤波器的使用(二)

一、【说在前面】 Ansible Filter一般被称为滤波器或者叫过滤器。 这个东西初次听到以为是什么科学计算的东西&#xff0c;但是想来ansible不太可能有什么滤波操作&#xff0c;所以这个东西本质是一个数值筛选器&#xff0c;内置函数&#xff0c;本质是一个为了做区别化的工具…

【稳定检索、投稿优惠】2024年机械自动化与电力系统国际会议(IACMAPS 2024)

2024年机械自动化与电力系统国际会议(IACMAPS 2024) 2024 International Conference on Mechanical Automation and Power Systems(IACMAPS 2024) 一、【会议简介】 2024年机械自动化与电力系统国际会议(IACMAPS 2024)将在大理盛大召开。本次会议旨在汇聚全球的机械自动化与电力…

gsap timeline示例-实现滚动切换手机颜色

前言 最近使用gsap有点上瘾。看过一个手机官网滚动切换手机颜色的效果&#xff0c;初次见还是很炫。所以呢&#xff0c;就去研究了下&#xff0c;发现也不过如此。我们现在使用gsap来实现它。 首先来看最终效果&#xff1a; gsap timeline示例-实现滚动切换手机颜色 实现原理…

[HarmonyOS]第一课:ArkTS开发语言介绍

判断题 1. 循环渲染ForEach可以从数据源中迭代获取数据&#xff0c;并为每个数组项创建相应的组件。 答&#xff1a;正确(True) 2. Link变量不能在组件内部进行初始化。 答&#xff1a;正确(True) 单选题 1. 用哪一种装饰器修饰的struct表示该结构体具有组件化能力&#x…

这10个技巧你都会?绝对算网络抓包高手!

中午好&#xff0c;我的网工朋友。抓包工具Wireshark大家都知道&#xff0c;它可以截获和分析网络数据封包&#xff0c;检测网络上的问题&#xff0c;比如网络延迟、数据丢失、拥堵等&#xff0c;以及评估网络性能。 当网络里发现恶意攻击、某人下载流量过大、设备互联丢包、协…

C#微信公众号HIS预约挂号系统源码

微信公众号预约挂号系统、支付宝小程序预约挂号系统主要是让自费、医保患者在手机上就能实现就医全过程&#xff0c;实时预约挂号、自费、医保结算&#xff0c;同时还可以查询检查检验报告等就诊信息&#xff0c;真正实现了让信息“多跑路”&#xff0c;让群众“少跑腿”。系统…

NXP采用RS RTS测试系统,验证28纳米RFCMOS雷达单芯片 |百能云芯

Rohde & Schwarz的雷达目标模拟器R&S RTS&#xff0c;作为汽车雷达的颠覆性解决方案&#xff0c;尤其是其能够电子模拟非常近距离物体的能力&#xff0c;已被用于验证NXP半导体的下一代雷达传感器参考设计的性能。 这一合作使汽车行业在汽车雷达的发展上迈出了一步&…

python热重载调试神器Reloadium,Debug工具用print太慢了

作为程序员&#xff0c;我们都深知调试&#xff08;Debug&#xff09;在编程过程中的重要性。然而&#xff0c;使用传统的"print"语句进行调试可能效率较低&#xff0c;今天&#xff0c;笔者将推荐一款独具一格的Python调试工具——Reloadium。Reloadium为IDE添加了热…

[HarmonyOS]第一课:运行HelloWorld

判断题 1. DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。 答&#xff1a;正确(True) 2. main_pages.json存放页面page路径配置信息。 答&#xff1a;正确(True) 单选题 1. 在stage模型中&#xff0c;下列配置文件属于AppScope文件夹的是&#xff1f; A. main_…

ChatGPT vs 文心一言: 两大AI助手的较量

文章目录 每日一句正能量前言ChatGPTChatGPT的优点ChatGPT的劣势 文心一言文心一言的优势文心一言的劣势 后记 每日一句正能量 无所不能的人实在一无所能&#xff0c;无所不专的专家实在是一无所专。 前言 随着人工智能技术的发展&#xff0c;ChatGPT和文心一言已成为广受欢迎…

LY/T 2878-2017 木镶板门检测

木镶板门是指由木镶板门扇和木镶板门框组成的木门&#xff0c;根据构成材料的不同&#xff0c;分为实木木镶板门&#xff0c;实木复合木镶板门和木质复合木镶板门。 LY/T 2878-2017 木镶板门检测项目 测试项目 测试标准 外观 LY/T 1923 尺寸及偏差 LY/T 1923 含水率 LY…

java cc链3TrAXFilter与InstantiateTransformer

java cc链3TrAXFilter与InstantiateTransformer 上文最后调用 templates.newTransformer()cc链1中&#xff0c;是通过InvokerTransformer.transform方法&#xff0c;通过反射进而执行系统命令&#xff0c;这里通过反射调用TemplatesImpl.newTransformer&#xff0c;实现和temp…

Linux命令之pwd,cd,ls,cat,more,less,head,tail文件目录类命令的使用

一、实验题 在桌面打开终端&#xff0c;查看当前目录 改变目录位置至当前目录的父目录 改变目录位置至用户的家目录 利用绝对路径改变目录到/usr/local目录下 列出当前目录下的文件及目录 列出包括以“.”开始的隐藏文件在内的所有文件 列出当前目录下所有文件的权限、所有者、…

【消息队列】MQ 是什么?为什么用MQ?怎么实现MQ?

一、消息队列是什么&#xff1f; 消息队列&#xff08;MQ&#xff09; 是一种在分布式系统中&#xff0c;用于在应用程序之间传递消息的通信机制。它通常包含一个消息生产者、一个消息消费者和一个消息队列。消息队列允许应用程序异步地将消息发送到队列&#xff0c;而不需要立…

Go后端开发 -- 面向对象特征:结构体 继承 多态 interface

Go后端开发 – 面向对象特征&#xff1a;结构体 && 继承 && 多态 && interface 文章目录 Go后端开发 -- 面向对象特征&#xff1a;结构体 && 继承 && 多态 && interface一、Go的结构体1.结构体的声明和定义2.结构体传参 二、将…

简易机器学习笔记(十一)opencv 简易使用-人脸识别、分类任务

前言 前段时间摸了下机器学习&#xff0c;然后我发现其实openCV还是一个很浩瀚的库的&#xff0c;现在也正在写一篇有关yolo的博客&#xff0c;不过感觉理论偏多&#xff0c;所以在学yolo之前先摸一下opencv&#xff0c;简单先写个项目感受感受opencv。 流程 openCV实际上已…