在Vue项目中封装axios的最新方法
作者:全栈若城
这篇文章介绍了axios的基本使用和封装方法,包括设置接口请求前缀、请求头和超时时间、封装请求方法、添加请求和响应拦截器,封装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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!