前端项目开发技巧-使用TypeScript二次封装Axios

文章介绍了如何用TypeScript对Axios进行二次封装,创建http.ts和commonHttp.ts文件,配置拦截器和安全设置。在Vue3项目中,通过getCurrentInstance()获取代理并调用封装后的请求方法,简化网络请求过程。同时,封装提供了统一的错误处理和回调功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概要

文章介绍了如何使用TypeScript来二次封装Axios,以规范项目前端开发流程中不同成员在网络请求以及一些对于请求安全的配置,同时也便于后期审阅与修改

二、用法展示

封装后端api
  1. 第一步引入封装好的req文件
  2. 根据实际接口进行模板封装,模板如下
// params将会自动识别为get方法的参数,data则是其余类似POST方法的参数
export let 接口名称 = (params:object,data:obejct) => {
   
   
	return req.request({
   
   
		method:'方法类型',
		url:'接口地址',
		data?  post等方法参数
		params? put方法参数
		headers? 请求头配置(如Content-type)
	})
}
  1. 在vue文件中根据js文件导出的名称引用即可
.vue文件中进行网络请求

让我们只关注重要的逻辑代码

  1. 因为Vue3中我们不能在setup函数中调用this,因此我们可以借助Vue官方给予的一个接口getCurrentInstance()来获取当前页面代理
const {
   
    proxy }: any = getCurrentInstance()
  1. 拥有了proxy后我们就可以正式进行网络请求了,首先让我们明确调用接口所需的参数(如下图中的data),然后只需填充下面这个模板就能够成功进行网络请求了!
proxy.$cHttp({
   
   
	func:请求方法【就是我们封装好的后端接口】[必填],
	data/params:接口所需的参数[可选]
	success:成功回调[可选]....
})

只用简单的两步,我们就成功的发送了我们的网络请求!但其实这次封装的功能远不止这么简单!!
在这里插入图片描述

三、技术细节

我们一共要封装出两个文件http.ts与commonHttp.ts(这两个文件可以自己命名),其中http.ts用在第一次封装axios,其细节在于对网络请求进行拦截器的配置与一些安全设置相关的内容。commonHttp.ts用于规范我们的请求格式,包括对请求接口的确定,请求成功回调,失败回调等…

不难发现commonHttp其实是我们上述实例中$cHttp的全程,当然这两个名字你也可以diy!

http.js

  1. 我们构造一个Request类,该类的本质其实就是axios,我们只是通过这个类初始化一些对axios的配置
  2. 我们可以通过构造函数来定制一些项目中的请求约束,例如携带token进行请求等
import config from '../config'
import axios, {
   
    AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
import VueCookies from 'vue-cookies'
const Cookies: any = VueCookies
class Request {
   
   
	instance: AxiosInstance
	baseConfig: AxiosRequestConfig = {
   
   
		baseURL: config.
### 什么是 Axios二次封装 Axios 是一种强大的 HTTP 客户端工具,广泛应用于前端开发中。为了增强其功能并适应复杂的业务场景,通常会对 Axios 进行二次封装。这种封装可以集中管理请求配置、错误处理逻辑以及全局状态控制。 以下是基于 TypeScript 实现的一个完整的 Axios 二次封装示例: --- ### 封装实现 #### 创建 Axios 实例 通过自定义 Axios 配置来初始化一个新的 Axios 实例,从而简化后续调用中的重复参数设置。 ```typescript import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; const service: AxiosInstance = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 设置基础 URL 地址 timeout: 5000, // 请求超时时间 (毫秒) }); ``` 此部分代码设置了 `baseURL` 和 `timeout` 参数[^1],使每次发起请求时无需手动指定这些选项。 --- #### 添加请求拦截器 在请求发出之前对其进行预处理操作,例如添加认证令牌或修改请求数据结构。 ```typescript service.interceptors.request.use( (config: AxiosRequestConfig): AxiosRequestConfig => { const token = localStorage.getItem('token'); // 获取存储的 Token if (token && config.headers) { config.headers['Authorization'] = `Bearer ${token}`; // 自动附加到请求头部 } return config; }, (error: any) => { console.error(error); // 打印错误日志 return Promise.reject(error); } ); ``` 这段代码展示了如何利用请求拦截器自动注入身份验证所需的 Bearer Token[^2]。 --- #### 添加响应拦截器 当服务器返回的数据到达客户端后,可以通过响应拦截器进一步加工或者统一处理异常情况。 ```typescript service.interceptors.response.use( (response: AxiosResponse<any>): any => { const res = response.data; // 如果接口返回的状态码不等于 200,则认为是有误的情况 if (res.code !== 200) { Message.error(res.message || 'Error'); return Promise.reject(new Error(res.message || 'Error')); } return res; }, (error: any) => { if (error.response?.status === 401) { MessageBox.confirm('登录已过期,请重新登录', '确认登出', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { window.location.href = '/login'; // 跳转至登录页面 }); } return Promise.reject(error); } ); ``` 这里实现了针对不同类型的错误反馈机制,并提供了友好的用户体验提示。 --- #### 统一封装方法 最后一步是对常用的 HTTP 方法进行统一封装,方便开发者快速调用而不需要每次都传递相同的配置项。 ```typescript export default class HttpRequest { public static get<T>(url: string, params?: object): Promise<T> { return service.get(url, { params }); } public static post<T>(url: string, data?: object): Promise<T> { return service.post(url, data); } public static put<T>(url: string, data?: object): Promise<T> { return service.put(url, data); } public static delete<T>(url: string, params?: object): Promise<T> { return service.delete(url, { params }); } } ``` 以上代码片段提供了一组简洁易懂的方法签名供外部调用者使用[^1]。 --- ### 使用封装后的 Axios 发送请求 完成上述步骤之后,就可以像下面这样轻松地执行网络请求了: ```javascript import HttpRequest from './HttpRequest'; HttpRequest.get('/users') .then((data) => { console.log(data); // 输出获取到的结果集 }) .catch((err) => { console.error(err); // 处理潜在发生的错误情形 }); ``` 这种方式不仅提高了代码可读性,还减少了冗余逻辑的存在几率。 --- ### 总结 通过对 Axios二次封装,能够显著提升项目的灵活性与扩展能力。合理运用请求/响应拦截器可以帮助我们更好地应对跨域资源共享(CORS),安全性加固等问题;同时也能让团队成员之间的协作更加顺畅高效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值