当前位置: 首页 > news >正文

如何在Vue项目中封装axios

文章目录

    • 一、axios简介
      • 基本使用
    • 二、封装axios的原因
    • 三、封装axios的方法
      • 1. 设置接口请求前缀
      • 2. 设置请求头和超时时间
      • 3. 封装请求方法
      • 4. 添加请求拦截器
      • 5. 添加响应拦截器
      • 小结

一、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. 封装请求方法

封装 GETPOST 请求方法,便于统一管理和使用:

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 是提升项目代码质量的重要手段。合理的封装不仅能减少重复代码,还能提高代码的可维护性和可读性。封装方案应根据项目需求灵活设计。

http://www.lryc.cn/news/459405.html

相关文章:

  • linux 配置ssh免密登录
  • 【AI绘画】Midjourney进阶:三分线构图详解
  • 享元模式(C++)
  • 开发一个UniApp需要多长时间
  • 服务器源IP暴露后的安全风险及防御措施
  • YoloV8改进策略:BackBone改进|CAFormer在YoloV8中的创新应用,显著提升目标检测性能
  • 网络编程(19)——C++使用asio协程实现并发服务器
  • 【SQL】深入了解 SQL 索引:数据库性能优化的利器
  • 河道垃圾数据集 水污染数据集——无人机视角数据集 共3000张图片,可直接用于河道垃圾、水污染功能检测 已标注yolo格式、voc格式,可直接训练;
  • [棋牌源码] 2023情怀棋牌全套源代码含多套大厅UI及600+子游源码下载
  • 深度学习:预训练模型(基础模型)详解
  • 欧科云链研究院深掘链上数据:洞察未来Web3的隐秘价值
  • 国外电商系统开发-运维系统登录阈值
  • 设备台账管理是什么
  • 操作教程|基于DataEase用RFM分析法分析零售交易数据
  • 使用Go语言的gorm框架查询数据库并分页导出到Excel实例
  • Run the FPGA VI 选项的作用
  • 新手入门怎么炒股,新手炒股入门需要做哪些准备?
  • Fetch 与 Axios:JavaScript HTTP 请求库的详细比较
  • 记录一个Ajax发送JSON数据的坑,后端RequestBody接收参数小细节?JSON对象和JSON字符串的区别?
  • 【智能算法应用】长鼻浣熊优化算法求解二维路径规划问题
  • 微服务中的负载均衡算法与策略深度解析
  • 初知C++:AVL树
  • [LeetCode] 67. 二进制求和
  • 工业物联网关-ModbusTCP
  • 子组件向父组件传值$emit
  • 校车购票微信小程序的设计与实现(lw+演示+源码+运行)
  • 【Golang】关于Go语言中的定时器原理与实战应用
  • matlab不小心删除怎么撤回
  • 云原生、云计算、虚拟化概念概述