利用Axios封装及泛型实现定制化HTTP请求处理
本案例旨在教授如何使用Axios库结合TypeScript泛型进行HTTP请求的高级封装,以提升代码的可复用性和类型安全性。我们将通过一个具体的示例,学习如何创建一个通用的请求函数,它能够适应不同类型的API响应,并在请求前后加入自定义逻辑(如错误处理、Token注入等)。
1. 引入必要的库和类型
- 引入Axios:首先,我们导入Axios库及其相关类型,用于发起网络请求。
- 定义类型:引入AxiosInstance和AxiosRequestConfig类型,以增强代码的类型提示和安全性。
import axios, { type AxiosResponse } from 'axios';
import type { AxiosInstance, AxiosRequestConfig } from 'axios';
2. 创建Axios实例并配置
- 配置基础设置:通过axios.create方法创建一个Axios实例,并设置基础URL和超时时间等默认配置
const axiosInstance: AxiosInstance = axios.create({baseURL: 'https://tenapi.cn/v2/',timeout: 10000
});
3. 添加请求和响应拦截器
- 请求拦截器:在请求发送前可以统一处理逻辑,如添加认证信息。
- 响应拦截器:对返回的响应进行统一处理,如错误码判断。
axiosInstance.interceptors.request.use(config => {// 可以在此处添加Token或其他请求头return config;
}, error => Promise.reject(error));axiosInstance.interceptors.response.use(res => res, error => Promise.reject(error));
4. 定义API响应接口
- ApiResponse接口:定义一个泛型接口来规范API响应的结构,包含状态码、消息、时间戳和数据部分。
export interface ApiResponse<T = any> {code: number;msg: string;timestamp: number;data: T;
}
5. 封装请求函数
- 泛型request函数:创建一个异步的泛型函数request,它接受请求配置并返回经过类型转换的响应数据。
export async function request<T>(config: AxiosRequestConfig): Promise<T> {return axiosInstance.request<ApiResponse<T>>(config).then(res => res.data);
}
6. 使用封装的请求函数
- 具体请求示例:定义一个数据模型Hot,并使用request函数发起请求,处理响应数据
interface Hot {name: string;url: string;hot: number;
}request<Array<Hot>>({url: '/baiduhot',method: 'get'
}).then(res => {if(res.code === 200) {const hot = res.data[0];console.log(hot.name);}
});
6. 完整代码
import axios, {type AxiosResponse} from 'axios';
import type { AxiosInstance, AxiosRequestConfig } from 'axios';/* 创建axios实例 */
const axiosInstance : AxiosInstance = axios.create({baseURL: 'https://tenapi.cn/v2/',timeout: 10000
});/* 封装实例的请求拦截器 */
axiosInstance.interceptors.request.use( config => {return config;
}, (error) => {return Promise.reject(error);
});/* 封装实例的响应拦截器 */
axiosInstance.interceptors.response.use( (res : AxiosResponse<any>) => {return res;
}, (error) => {return Promise.reject(error);
});/* 定义接口 */
export interface ApiResponse<T> {code: number;msg: string;timestamp: number;data: T;
}/* 封装实例的请求方法 */
export async function request<T>(config: AxiosRequestConfig ) {// axios实例的 request 接受的第一个泛型参数,就是返回数据data的类型return axiosInstance.request<ApiResponse<T>>(config).then((res) => res.data);
}/* 如何使用代码如下 */
interface Hot {name: string;url: string;hot: number;
}request<Array<Hot>>({url: '/baiduhot',method: 'get'
}).then(res => {if(res.code == 200) {let hot = res.data[0];console.log(hot.name);}
});
提示:更多的Axios配置信息请看官网
相关文章:
利用Axios封装及泛型实现定制化HTTP请求处理
本案例旨在教授如何使用Axios库结合TypeScript泛型进行HTTP请求的高级封装,以提升代码的可复用性和类型安全性。我们将通过一个具体的示例,学习如何创建一个通用的请求函数,它能够适应不同类型的API响应,并在请求前后加入自定义逻…...
RN6752V1 高性能AHD转MIPIDVPBT656BT601芯片方案,目前适用于车载方案居多
RN6752V1描述: RN6752V1是一种模拟高清晰度(模拟高清)视频解码器IC,专为汽车应用而设计。它集成了所有必要的功能块: AFE,PLL,解码逻辑,MIPI和I2C接口等,在一个小的5mm …...
Rust 基金会的商标政策更新引发社区争议
Rust 基金会最近更新了其商标政策,引发了社区内的一些争议。 Rust 是一种高性能系统编程语言,拥有庞大的开发者社区。Rust 基金会成立于 2020 年,旨在支持和推动 Rust 语言的发展。该基金会负责管理 Rust 的商标,并制定了商标使用…...
Java Opencv识别图片上的虫子
最近有个需求,希望识别图片上的虫子,对于java来说,图像识别不是很好做。在网上也搜索了很多,很多的代码都是不完整,或者下载下载报错,有的写的很长看不懂。所以自己试着用java的opencv写了一段代码。发现识…...
微型操作系统内核源码详解系列五(1):arm cortex m3架构
系列一:微型操作系统内核源码详解系列一:rtos内核源码概论篇(以freertos为例)-CSDN博客 系列二:微型操作系统内核源码详解系列二:数据结构和对象篇(以freertos为例)-CSDN博客 系列…...
值传递和址传递
值传递 上面的代码是想要交换x,y的值,把x,y传递给swap函数之后,执行下面的操作: 在swap中a和b交换了,但是和x,y没有关系,所以x,y在main中不会变。 址传递 下面再看把x…...
【three.js】自定义物体形状BufferGeometry
目录 一、认识缓冲类型几何体BufferGeometry 二、将各个顶点连线 一、认识缓冲类型几何体BufferGeometry threejs的长方体BoxGeometry、球体SphereGeometry等几何体都是基于BoxGeometry类构建的,BufferGeometry是一个没有任何形状的空几何体,你可以通过BufferGeometry自定…...
Mac 使用 Homebrew 安装 Python3
在macOS系统中,使用Homebrew安装Python3并进行环境配置的步骤如下: 打开终端。 运行以下命令安装Python3: brew install python3 安装完成后,可以通过以下命令检查Python3的版本: python3 --version 为了确保终端…...
汽车行驶中是怎么保障轴瓦安全的?
汽车轴瓦是一种用于减少摩擦和支撑转动部件的关键零部件,通常用于发动机的曲轴、凸轮轴等转动部件上。主要作用是减少转动部件之间的摩擦,支撑和保护曲轴、凸轮轴等旋转部件,确保它们在高速旋转时的稳定性和耐用性。 在汽车轴瓦加工过程中&am…...
洗地机哪款好?洗地机十大名牌排行榜
随着科技的发展,各种家居清洁工具层出不穷,为我们的生活带来了诸多便利。在众多清洁工具中,洗地机的清洁效果更受大家喜爱,它能够完美解决了扫地机无法做到的干湿垃圾“一遍清洁”效果,而且几乎能解决日常生活中所有的…...
spark mllib 特征学习笔记 (二)
当然,请继续介绍其他特征处理方法的公式、适用场景和案例: 10. StringIndexer 公式: 将字符串类型的标签转换为数值索引: StringIndexer ( x ) { 0 , 1 , 2 , … , N − 1 } \text{StringIndexer}(x) \{0, 1, 2, \ldots, N-1…...
湘潭大学软件工程数据库2(题型,复习资源和计划)
文章目录 选择题关系范式事务分析E-R 图sql作业题答案链接(仅限有官方答案的版本)结语 现在实验全部做完了,实验和作业占比是百分之 40 ,通过上图可以看出来,重点是 sql 语言 所以接下来主要就是学习 sql 语句怎么书写…...
第二十三节:带你梳理Vue2:Vue插槽的认识和基本使用
前言: 通过上一节的学习,我们知道了如何将数据从父组件中传递到子组件中, 除了除了将数据作为props传入到组件中,Vue还允许传入HTML, Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 <slot> 元素作为承载分发…...
父亲节马上到了-和我一起用Python写父亲节的祝福吧
前言 让我们一起用Python写一段父亲节的祝福吧 📝个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列: ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 话不多说先上代码 import tkinter as tk from doctest imp…...
winform 应用程序 添加 wpf控件后影响窗体DPI改变
第一步:添加 应用程序清单文件 app.manifest 第二步:把这段配置 注释放开,第一个配置true 改成false...
Web前端开发素材:探索、选择与应用的艺术
Web前端开发素材:探索、选择与应用的艺术 在Web前端开发的广袤领域中,素材的选择与应用无疑是一项至关重要的技能。它们如同构建网页的砖石,既承载着设计的美感,又影响着用户体验的深度。本文将从四个方面、五个方面、六个方面和…...
LeetCode | 20.有效的括号
这道题就是栈这种数据结构的应用,当我们遇到左括号的时候,比如{,(,[,就压栈,当遇到右括号的时候,比如},),],就把栈顶元素弹出,如果不匹配,则返回False,当遍历完所有元素后…...
ceph scrub 错误记录
目的 记录 ceph scrub 错误问题解决 ceph scrub 故障故障信息 cluster:id: xxx-xxx-xxxhealth: HEALTH_ERR2 scrub errorsPossible data damage: 2 pg inconsistentmessage 日志信息 # egrep -i medium|i\/o error|sector|Prefailure /var/log/messages Jun 15 00:23:37 m…...
cs与msf权限传递,以及mimikatz抓取明文密码
cs与msf权限传递,以及mimikatz抓取win10明文密码 1、环境准备2、Cobalt Strike ------> MSF2.1 Cobalt Strike拿权限2.2 将CS权限传递给msf 3、MSF ------> Cobalt Strike3.1 msf拿权限3.2 将msf权限传递给CS 4、使用mimikatz抓取明文密码 1、环境准备 攻击&…...
Windows下的zip压缩包版Mysql8.3.0数据迁移到Mysql8.4.0可以用拷贝data文件夹的方式
Windows下的zip压缩包版Mysql8.3.0数据迁移到Mysql8.4.0可以用拷贝data文件夹的方式 拷贝后, 所有账户和数据都是一样的 步骤 停止MySQL服务 net stop mysql 或 sc.exe stop mysql net stop mysqlsc.exe stop mysql卸载 Mysql8.3.0 的服务 mysqld remove 或 mysqld remove m…...
Apollo自动驾驶系统C++核心模块实战解析——从源码到实现
1. Apollo自动驾驶系统架构全景解析 第一次打开Apollo源码仓库时,我完全被它庞大的代码量震撼到了——超过200万行C代码构成的自动驾驶系统,就像一座精密的机械钟表。但当你拆解它的核心模块后,会发现其架构设计处处体现着模块化和高内聚低耦…...
科研写作效率提升300%:WPS-Zotero跨平台文献管理终极指南
科研写作效率提升300%:WPS-Zotero跨平台文献管理终极指南 【免费下载链接】WPS-Zotero An add-on for WPS Writer to integrate with Zotero. 项目地址: https://gitcode.com/gh_mirrors/wp/WPS-Zotero WPS-Zotero是一款革命性的WPS Office插件,专…...
如何从零开始使用Logisim-Evolution?数字逻辑电路设计全流程指南
如何从零开始使用Logisim-Evolution?数字逻辑电路设计全流程指南 【免费下载链接】logisim-evolution Digital logic design tool and simulator 项目地址: https://gitcode.com/gh_mirrors/lo/logisim-evolution Logisim-Evolution是一款免费开源的数字逻辑…...
AudioSeal实战教程:Python API调用AudioSeal模型实现批量音频水印处理
AudioSeal实战教程:Python API调用AudioSeal模型实现批量音频水印处理 1. 项目概述与核心价值 AudioSeal是Meta开源的专业级音频水印系统,专门用于AI生成音频的检测和溯源。这个工具能帮助内容创作者、平台运营者和版权方解决一个关键问题:…...
Qwen3智能字幕系统效果展示:法庭庭审录音→高司法术语准确率字幕
Qwen3智能字幕系统效果展示:法庭庭审录音→高司法术语准确率字幕 1. 引言:当AI成为“数字书记员” 想象一下这样的场景:一场长达数小时的法庭庭审正在进行,书记员的手指在键盘上飞速敲击,试图跟上律师与证人间密集、…...
Pixel Mind Decoder 效果对比视频:同一段文本在不同模型下的情绪解析差异
Pixel Mind Decoder 效果对比视频:同一段文本在不同模型下的情绪解析差异 1. 情绪解析技术的新突破 在自然语言处理领域,情绪识别一直是个充满挑战的任务。传统模型往往只能识别基本的喜怒哀乐,而人类情绪实际上要复杂得多。Pixel Mind Dec…...
解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧
解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas …...
Proxifier规则配置避坑指南:如何精准放行微信/QQ流量,让你的渗透测试更丝滑
Proxifier规则配置实战:精准分流社交软件流量的高阶技巧 渗透测试工程师们对Proxifier这款工具应该都不陌生——它就像网络流量的交通指挥官,能精准地将不同应用程序的请求导向代理或直连通道。但实际使用中,不少人都遇到过这样的尴尬&#x…...
Emu3.5:vision、text 的vocab id 体系
Emu3.5 中视觉与语言 ID 体系的完整分析报告 https://huggingface.co/BAAI/Emu3.5 1. 报告目的 本文专门回答一个问题: Emu3.5 中,图片在进入大模型之前,视觉 tokenizer 的离散索引、视觉 special token 字符串、以及 LLM 最终接收的统一词表整数 id,三者之间到底是什么…...
2024年TVBOX源接口终极整理:手把手教你如何筛选稳定高速线路
2024年TVBOX源接口高效筛选与优化指南 在流媒体内容消费日益普及的今天,TVBOX作为一款开源播放器解决方案,凭借其强大的扩展性和丰富的资源获取能力,赢得了众多技术爱好者的青睐。然而,面对网络上浩如烟海的源接口资源,…...
