Axios结合Typescript 二次封装完整详细场景使用案例

server/2024/12/15 17:50:52/

Axios 是一个基于 promise 的 HTTP 客户端,用于浏览器和 node.js。二次封装 Axios 主要是为了统一管理 HTTP 请求,例如设置统一的请求前缀、头部、超时时间,统一处理请求和响应的格式,以及错误处理等。

以下是一个使用 TypeScript 进行 Axios 二次封装的详细场景使用案例:

1. 创建 Axios 实例

首先,创建一个 Axios 实例,并配置通用参数。

import axios from 'axios';const instance = axios.create({baseURL: 'https://api.example.com',timeout: 10000, // 请求超时时间headers: {'Content-Type': 'application/json'}
});export default instance;
2. 统一请求处理

封装请求方法,包括统一的请求前缀、头部处理等。

// http.ts
import axios from './path/to/axiosInstance';// 添加一个通用的请求前缀
function request(url: string, config?: AxiosRequestConfig) {const fullPath = `/api/${url}`;// 可以在这里添加通用的 header 或其他配置const defaultConfig = {headers: {'Authorization': `Bearer ${localStorage.getItem('token')}`}};return axios({url: fullPath,...config,...defaultConfig});
}export default request;
3. 响应拦截器

处理响应拦截器,统一处理响应数据格式。

// http.ts (继续上面的代码)
import axios, { AxiosInstance } from 'axios';// 响应拦截器
instance.interceptors.response.use(response => {// 对响应数据做点什么return response.data;
}, error => {// 对响应错误做点什么return Promise.reject(error);
});export default instance;
4. 错误处理

统一处理 HTTP 请求错误。

// http.ts (继续上面的代码)
import { AxiosError } from 'axios';// 使用封装的请求函数
function handleError(error: AxiosError) {if (error.response) {// 请求已发出,服务器响应了状态码 2xx 之外的其他状态console.error(error.response.data);console.error(error.response.status);console.error(error.response.headers);} else if (error.request) {// 请求已发出但没有收到响应console.error(error.request);} else {// 发生了触发请求错误的问题console.error('Error', error.message);}return Promise.reject(error);
}export { handleError };
5. 使用封装的 HTTP 客户端

在组件或其他服务中使用封装的 HTTP 客户端进行请求。

// SomeComponent.vue
import http from './path/to/http';
import { handleError } from './path/to/http';export default {async created() {try {const response = await http('/user', {method: 'get'});this.user = response.data;} catch (error) {handleError(error);}}
};
6. 封装特定的 API 请求

创建特定的 API 服务文件,如用户服务。

// api/user.ts
import http from '../http';export const getUser = (userId: string) => http(`/users/${userId}`);
export const updateUser = (userId: string, userData: object) => http(`/users/${userId}`, {method: 'put',data: userData
});// 其他 API 调用 ...
7. 使用特定的 API 服务

在组件中使用特定的 API 服务。

// SomeComponent.vue
import { getUser, updateUser } from './api/user';export default {methods: {async fetchUser() {try {const user = await getUser('123');this.user = user;} catch (error) {handleError(error);}},async saveUser() {try {await updateUser('123', { name: 'New Name' });} catch (error) {handleError(error);}}}
};

通过上述步骤,你可以创建一个可维护性高、易于使用的 HTTP 客户端,它包括统一的配置、拦截器、错误处理和 API 调用封装。这使得在项目中进行 API 请求变得更加一致和方便。


http://www.ppmy.cn/server/150403.html

相关文章

体验 Whisper ,本地离线部署自己的 ASR 语音识别服务

需求背景 最近看视频,过几天后经常忘记内容,所以有了把重点内容总结提炼到自己知识库的需求,这涉及到了提取视频中的音频数据、离线语音识别等功能。 提取视频中的音频数据,可以使用格式工厂或 FFmpeg 等工具, FFmpe…

操作系统(7)处理机调度

前言 操作系统中的处理机调度是一个核心概念,它涉及如何从就绪队列中选择进程并将处理机分配给它以运行,从而实现进程的并发执行。 一、调度的层次 高级调度(作业调度): 调度对象:作业(包含程序…

MR30分布式IO在新能源领域加氢站的应用

导读 氢能被誉为21世纪最具发展潜力的清洁能源,氢能科技创新和产业发展持续得到各国青睐。氢能低碳环保,燃烧的产物只有水,是用能终端实现绿色低碳转型的重要载体。氢能产业链分别为上游制氢、中游储运以及下游用氢。上游制氢工艺目前大部分…

MFC:CFile类的使用

为方便对文件操作,MFC提供了CFile类用于文件的读写操作,具体包括文件数据的读取、写入以及文件内部指针的移动等。打开文件时,会有一个指向该文件的指针,同时还生成一个指向具体数据的内部指针,用于记录读取或写入的位…

linux下socket本地套接字通讯

使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。socket进程通信与网络通信使用的是统一套接口,只是地址结构与某些参数不同。 用途 进程间通信:本地套…

Redis 附加功能(一) - 数据库

Redis的数据会被存储到一个名为数据库的容器中。一个Redis服务器可以包含多个数据库,默认情况下,会创建16个数据库。这些数据库用号码进行标志,第一个数据库为0号数据库。 数据库 切换到指定的数据库:SELECT index 获取所有与给定…

在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)

SSH 在 linux 中是一种重要的系统组件,用户可以使用 SSH 来远程连接 linux 系统的计算机,或者传输文件。不过在 win10 以前,windows 并不原生支持 SSH,需要借助第三方工具来使用 SSH 功能。而实际上,微软在 2015 年就曾…

redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip

redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip 1、安装redis三主三从集群2、正常状态的redis集群3、更改redis集群服务器的ip 重启服务器 集群会down4、更改redis集群服务器的ip 重启服务器 集群down的原因5、更改redis集群服务器的ip后&#xf…