admin管理员组文章数量:1487745
如何在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引入:
代码语言:javascript代码运行次数:0运行复制<script src=".min.js"></script>
在项目中导入并使用:
代码语言:javascript代码运行次数:0运行复制import axios from 'axios';
axios({
url: 'xxx',
method: 'GET',
params: {
type: '',
page: 1
}
}).then(res => {
console.log(res);
});
并发请求:
代码语言:javascript代码运行次数:0运行复制axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (res1, res2) {
// 处理响应
}));
二、封装axios的原因
虽然 axios
的API设计友好,但随着项目规模增长,直接使用 axios
可能会导致以下问题:
- 重复编写配置代码,如超时时间、请求头等。
- 难以维护的冗余代码。
- 缺乏统一的错误处理。
因此,封装
axios
可以提高代码质量和可维护性。
三、封装axios的方法
1. 设置接口请求前缀
根据不同环境(开发、测试、生产)设置不同的请求前缀:
代码语言:javascript代码运行次数:0运行复制if (process.env.NODE_ENV === 'development') {
axios.defaults.baseURL = '';
} else if (process.env.NODE_ENV === 'production') {
axios.defaults.baseURL = '';
}
在 vue.config.js
中配置代理转发以实现跨域:
devServer: {
proxy: {
'/proxyApi': {
target: '',
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 });
在页面中直接调用:
代码语言:javascript代码运行次数:0运行复制import { getorglist } from '@/assets/js/api';
getorglist({ id: 200 }).then(res => {
console.log(res);
});
4. 添加请求拦截器
在请求拦截器中添加通用逻辑,如设置token:
代码语言:javascript代码运行次数:0运行复制axios.interceptors.request.use(config => {
const token = localStorage.getItem('token');
token && (config.headers.Authorization = token);
return config;
}, error => Promise.reject(error));
5. 添加响应拦截器
在响应拦截器中处理通用错误和业务逻辑:
代码语言:javascript代码运行次数:0运行复制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 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754877348a3180725.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论