在Vue项目中封装axios的最新方法
一、axios简介
axios 是一个基于 XMLHttpRequest 的轻量级HTTP客户端,适用于浏览器和Node.js环境。它提供以下特性:
- 创建XMLHttpRequests和HTTP请求
- 支持 Promise API
- 请求和响应拦截
- 数据转换
- 取消请求
- 自动转换JSON数据
- 客户端XSRF防御
Vue 2.0起,官方推荐使用axios替代vue-resource。
基本使用
安装 axios:
npm install axios --S
或通过CDN引入:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
在项目中导入并使用:
import axios from 'axios';
axios({
url: 'xxx',
method: 'GET',
params: {
type: '',
page: 1
}
}).then(res => {
console.log(res);
});
并发请求:
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (res1, res2) {
// 处理响应
}));
二、封装axios的原因
虽然 axios 的API设计友好,但随着项目规模增长,直接使用 axios 可能会导致以下问题:
- 重复编写配置代码,如超时时间、请求头等。
- 难以维护的冗余代码。
- 缺乏统一的错误处理。
因此,封装axios可以提高代码质量和可维护性。
三、封装axios的方法
1. 设置接口请求前缀
根据不同环境(开发、测试、生产)设置不同的请求前缀:
if (process.env.NODE_ENV === 'development') {
axios.defaults.baseURL = 'http://dev.xxx.com';
} else if (process.env.NODE_ENV === 'production') {
axios.defaults.baseURL = 'http://prod.xxx.com';
}
在 vue.config.js 中配置代理转发以实现跨域:
devServer: {
proxy: {
'/proxyApi': {
target: 'http://dev.xxx.com',
changeOrigin: true,
pathRewrite: {
'^/proxyApi': ''
}
}
}
}
2. 设置请求头和超时时间
创建 axios 实例时,配置通用请求头和超时时间:
const service = axios.create({
timeout: 30000,
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
});
3. 封装请求方法
封装 GET 和 POST 请求方法,便于统一管理和使用:
export function httpGet({ url, params = {} }) {
return new Promise((resolve, reject) => {
axios.get(url, { params }).then(res => resolve(res.data)).catch(err => reject(err));
});
}
export function httpPost({ url, data = {}, params = {} }) {
return new Promise((resolve, reject) => {
axios({ url, method: 'post', data, params }).then(res => resolve(res.data)).catch(err => reject(err));
});
}
将封装的方法放在 api.js 文件中,便于统一管理:
import { httpGet, httpPost } from './http';
export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params });
在页面中直接调用:
import { getorglist } from '@/assets/js/api';
getorglist({ id: 200 }).then(res => {
console.log(res);
});
4. 添加请求拦截器
在请求拦截器中添加通用逻辑,如设置token:
axios.interceptors.request.use(config => {
const token = localStorage.getItem('token');
token && (config.headers.Authorization = token);
return config;
}, error => Promise.reject(error));
5. 添加响应拦截器
在响应拦截器中处理通用错误和业务逻辑:
axios.interceptors.response.use(response => {
if (response.status === 200) {
// 根据状态码处理业务逻辑
return Promise.resolve(response.data);
} else {
return Promise.reject(response);
}
}, error => {
// 处理错误
return Promise.reject(error);
});
小结
封装 axios 是提升项目代码质量的重要手段。合理的封装不仅能减少重复代码,还能提高代码的可维护性和可读性。封装方案应根据项目需求灵活设计。
到此这篇关于在Vue项目中封装axios的最新方法的文章就介绍到这了,更多相关Vue封装axios内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
element表格翻页第2页从1开始编号(后端从0开始分页)
这篇文章主要介绍了element表格翻页第2页从1开始编号(后端从0开始分页),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12
关于Vue "__ob__:Observer"属性的解决方案详析
在操作数据的时候发现,__ob__: Observer这个属性出现之后,如果单独拿数据的值,就会返回undefined,下面这篇文章主要给大家介绍了关于Vue "__ob__:Observer"属性的解决方案,需要的朋友可以参考下2022-11-11
Vue3中导入和使用图标库Font Awesome的实现步骤
Font Awesome 是互联网的图标库和工具包,被数百万设计师、开发人员和内容创建者使用,Font Awesome的图标非常丰富,基本涵盖你所需要的所有,本文给大家介绍了Vue3中导入和使用图标库Font Awesome的具体步骤,需要的朋友可以参考下2025-01-01
详解vuex中action何时完成以及如何正确调用dispatch的思考
这篇文章主要介绍了详解vuex中action何时完成以及如何正确调用dispatch的思考,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-01-01
Vue3 Element Plus el-form表单组件示例详解
这篇文章主要介绍了Vue3 Element Plus el-form表单组件,Element Plus 是 ElementUI 的升级版,提供了更多的表单控件和功能,同时还改进了一些细节和样式,本文结合示例代码给大家详细讲解,需要的朋友可以参考下2023-04-04


最新评论