Vue3 axios数据请求封装
发布人:shili8
发布时间:2025-03-08 06:22
阅读次数:0
**Vue3 Axios 数据请求封装**
在 Vue3 中,Axios 是一个非常流行的 HTTP 请求库。然而,直接使用 Axios 的话,我们需要每次都手动创建一个实例,并且需要传递配置参数,这样会导致代码冗余和难以维护。
因此,在本文中,我们将学习如何封装 Axios,实现更高效、易于维护的数据请求功能。
### **1. 创建 axios 实例**
首先,我们需要创建一个 Axios 的实例。我们可以在 `main.js` 文件中创建一个全局的 Axios 实例。
javascriptimport axios from 'axios';
const instance = axios.create({
// 基础 URL baseURL: process.env.VUE_APP_API_URL,
// 请求头 headers: {
'Content-Type': 'application/json',
},
// 超时时间(毫秒)
timeout:10000,
});
在上面的代码中,我们创建了一个 Axios 实例,并设置了基础 URL、请求头和超时时间。
### **2. 封装 axios 请求函数**
接下来,我们需要封装一些常用的 axios 请求函数。例如,`get()`, `post()`, `put()` 和 `delete()` 等。
javascript// get 请求export function get(url, params = {}) {
return instance.get(url, { params });
}
// post 请求export function post(url, data = {}, config = {}) {
return instance.post(url, data, config);
}
// put 请求export function put(url, data = {}, config = {}) {
return instance.put(url, data, config);
}
// delete 请求export function del(url, params = {}) {
return instance.delete(url, { params });
}
在上面的代码中,我们封装了四个常用的 axios 请求函数:`get()`, `post()`, `put()` 和 `delete()`。
### **3. 使用封装的 axios 请求函数**
最后,我们可以使用这些封装好的 axios 请求函数来发起请求。
javascript// get 请求示例import { get } from './axios';
const res = await get('/api/data');
console.log(res.data);
// post 请求示例import { post } from './axios';
const data = { name: 'John', age:30 };
const res = await post('/api/create', data);
console.log(res.data);
在上面的代码中,我们使用了封装好的 axios 请求函数来发起请求。
### **4. 错误处理**
最后,我们需要处理错误。我们可以在 `axios` 实例中设置一个错误拦截器。
javascriptinstance.interceptors.push({
responseError: (error) => {
// 处理错误 console.error(error);
return Promise.reject(error);
},
});
在上面的代码中,我们设置了一个错误拦截器,用于处理 axios 请求时的错误。
### **5. 总结**
通过本文的学习,我们可以实现 Vue3 Axios 数据请求封装。我们可以使用封装好的 axios 请求函数来发起请求,并且可以轻松地处理错误。
**完整代码示例**
javascript// main.jsimport axios from 'axios';
const instance = axios.create({
baseURL: process.env.VUE_APP_API_URL,
headers: {
'Content-Type': 'application/json',
},
timeout:10000,
});
instance.interceptors.push({
responseError: (error) => {
console.error(error);
return Promise.reject(error);
},
});
export function get(url, params = {}) {
return instance.get(url, { params });
}
export function post(url, data = {}, config = {}) {
return instance.post(url, data, config);
}
export function put(url, data = {}, config = {}) {
return instance.put(url, data, config);
}
export function del(url, params = {}) {
return instance.delete(url, { params });
}
javascript// axios.jsimport { get } from './main';
const res = await get('/api/data');
console.log(res.data);
const data = { name: 'John', age:30 };
const res = await post('/api/create', data);
console.log(res.data);
**注释**
* `axios.create()`:创建一个 axios 实例。
* `instance.interceptors.push()`:设置一个错误拦截器。
* `get()`, `post()`, `put()` 和 `delete()`:封装好的 axios 请求函数。
* `Promise.reject(error)`:返回一个 rejected 的 promise,用于处理错误。

