axios
1. axios 是什么
axios 是一个基于 Promise 的HTTP 请求库,用于浏览器和 Node.js 环境中发送网络请求(如 GET、POST 等),是 Vue 项目中常用的接口请求工具,支持请求拦截、响应拦截、取消请求等功能。
2. 为什么要封装
在 Vue 中封装 axios 主要是为了提升代码的复用性、可维护性与规范性,具体原因包括:
- 统一配置:集中管理请求基地址、超时时间等公共配置;
- 统一拦截:全局处理请求头(如携带 Token)、响应错误(如登录失效、接口报错);
- 简化调用:封装通用的请求方法(如
get/post),减少重复代码;
- 统一规范:约束接口请求的参数格式、响应处理逻辑。
3. 如何封装(Vue2 中)
以下是 Vue2 中 axios 的典型封装步骤:
(1)创建 axios 实例并配置公共参数
1 2 3 4 5 6 7 8
| import axios from 'axios';
const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 5000 });
|
(2)添加请求拦截器(处理请求前逻辑)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| service.interceptors.request.use( config => { const token = localStorage.getItem('token'); if (token) { config.headers['Authorization'] = 'Bearer ' + token; } return config; }, error => { return Promise.reject(error); } );
|
(3)添加响应拦截器(处理响应后逻辑)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| service.interceptors.response.use( response => { const res = response.data; if (res.code !== 200) { console.error(res.msg); return Promise.reject(new Error(res.msg || '请求失败')); } else { return res; } }, error => { if (error.response.status === 401) { window.location.href = '/login'; } console.error('接口请求错误:', error.message); return Promise.reject(error); } );
|
(4)封装请求方法并导出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| export const get = (url, params) => { return service({ url, method: 'get', params }); };
export const post = (url, data) => { return service({ url, method: 'post', data }); };
export default service;
|
(5)在 Vue 中使用
1 2 3 4 5 6 7
| import { get, post } from '@/utils/request';
get('/user/list', { page: 1 }).then(res => { console.log('用户列表:', res.data); });
|