VUE3项目学习系列--Axios二次封装(五)

本文介绍了如何在Vue项目中使用Axios进行网络请求的封装,包括创建axios实例、添加请求和响应拦截器,以及如何配置mock接口进行本地测试。重点展示了如何在服务端和客户端使用Axios,并演示了mock接口的安装和配置过程。

Axios中文文档 | Axios中文网 (axios-http.cn)

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。在项目中进行二次封装的主要目的是为了使用其请求与响应的拦截处理。

1、依赖安装

pnpm install axios

2、配置

在src根目录下创建utils/request.ts,详细配置参考axios官网

// 进行axios二次封装,使用请求与响应拦截器
import axios from 'axios'
import { ElMessage } from 'element-plus'

// 1、创建axios实例
const instance = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API,
   
Vue 3 中对 `axios` 进行二次封装是一种常见的优化方式,可以提高代码的可维护性和复用性。以下是一个较为完整的封装流程,结合项目结构和模块化思想,提供一个清晰的封装方案。 ### 创建 `axios` 实例 首先,在项目中安装 `axios`: ```bash npm install axios ``` 然后,创建一个专门用于封装 `axios` 的文件,例如在 `src/services/axios.ts` 中创建实例: ```typescript // src/services/axios.ts import axios from &#39;axios&#39;; // 创建 axios 实例 const service = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL || &#39;/api&#39;, // 从环境变量中获取基础路径 timeout: 5000, // 请求超时时间 }); // 请求拦截器 service.interceptors.request.use( (config) => { // 在发送请求之前做些什么,例如添加 token return config; }, (error) => { // 处理请求错误 return Promise.reject(error); } ); // 响应拦截器 service.interceptors.response.use( (response) => { // 对响应数据做点什么,例如统一处理 data return response.data; }, (error) => { // 对响应错误做点什么,例如统一处理错误信息 return Promise.reject(error); } ); export default service; ``` ### 封装 API 接口 接下来,可以在 `src/services/api` 文件夹中按模块分别封装接口。例如,创建 `user.ts` 和 `product.ts`: ```typescript // src/services/api/user.ts import axios from &#39;../axios&#39;; export const getUserInfo = (id: number) => { return axios.get(`/user/${id}`); }; export const login = (data: { username: string; password: string }) => { return axios.post(&#39;/login&#39;, data); }; ``` ```typescript // src/services/api/product.ts import axios from &#39;../axios&#39;; export const getProductList = () => { return axios.get(&#39;/products&#39;); }; export const createProduct = (data: { name: string; price: number }) => { return axios.post(&#39;/products&#39;, data); }; ``` ### 全局挂载 `axios` 在 Vue 3 中,可以通过 `app.config.globalProperties` 来挂载全局方法。虽然 Vue 3 更推荐按需引入,但在某些项目中,仍然可以使用全局挂载的方式: ```ts // main.ts import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import axios from &#39;./services/axios&#39;; import { getUserInfo } from &#39;./services/api/user&#39;; const app = createApp(App); // 挂载全局 $http 方法 app.config.globalProperties.$http = axios; // 挂载全局 API 方法 app.config.globalProperties.$api = { user: { getUserInfo, }, }; app.mount(&#39;#app&#39;); ``` ### 在组件中使用封装后的 `axios` 在组件中使用时,可以直接通过 `import` 引入 API 方法,或者通过全局挂载的方式调用: ```vue <script setup> import { onMounted } from &#39;vue&#39;; import { getUserInfo } from &#39;../services/api/user&#39;; onMounted(async () => { try { const res = await getUserInfo(1); console.log(res); } catch (error) { console.error(&#39;获取用户信息失败:&#39;, error); } }); </script> ``` 如果使用了全局挂载,也可以这样写: ```vue <script setup> import { onMounted } from &#39;vue&#39;; onMounted(async () => { try { const res = await this.$api.user.getUserInfo(1); console.log(res); } catch (error) { console.error(&#39;获取用户信息失败:&#39;, error); } }); </script> ``` ### 总结 通过上述方式,可以实现对 `axios` 的二次封装,使请求逻辑更清晰,接口管理更集中,并且可以在多个组件中复用。这种方式结合了模块化思想和 Vue 3 的新特性,适用于中大型项目[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值