Vue2 项目二次封装Axios

引言

在现代前端开发中,HTTP请求管理是构建健壮应用的核心能力之一。Axios作为目前最流行的HTTP客户端库,其灵活性和可扩展性为开发者提供了强大的基础能力。

1. 为什么要二次封装Axios?

1.1 统一项目管理需求

  • API路径标准化:通过baseURL统一管理接口前缀
  • 超时控制:全局设置合理超时时间(如5s)
  • 错误统一处理:集中管理网络异常和业务异常

1.2 拦截器核心作用

拦截器类型功能说明
请求拦截器处理请求头配置、添加Token、显示Loading动画
响应拦截器处理响应数据格式、隐藏Loading、统一错误提示、刷新Token等
请求拦截器
添加认证Token
处理Content-Type
显示加载状态
响应拦截器
处理响应数据
统一错误提示
刷新Token

1.3 扩展性优势

  • 便于后期添加全局缓存策略
  • 统一处理安全认证机制
  • 简化各组件中的请求代码

2. Axios与其他HTTP库对比

特性XMLHttpRequestfetchjQuery.ajaxAxios
Promise支持
拦截器机制
自动JSON转换手动处理
取消请求
浏览器兼容性全部现代浏览器全部现代浏览器

2. 基础封装实现

2.1 创建核心实例

// utils/request.js  
import axios from 'axios'  // 创建基础实例  
const service = axios.create({  baseURL: '/api',   // 为每个请求添加上 /api 前缀timeout: 10000,  // 超时时间 10秒headers: {  'X-Requested-With': 'XMLHttpRequest'  }  
})  export default service  

2.2 请求拦截器实现

service.interceptors.request.use((config) => {// Token处理const token = localStorage.getItem("token");if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;
});

2.3 响应拦截器分层处理

service.interceptors.response.use((res) => {// 成功响应处理if (res.data.code === 200) {return res.data;} else {return Promise.reject(res.data.message);}},(error) => {// 网络错误处理const errorMessage = error.response?.data?.message || "网络异常";console.error("API Error:", errorMessage);return Promise.reject(errorMessage);}
);

3. 接口模块化配置

3.1 创建API模块

一般在项目中,会对 api 统一管理,通常放在 src/api 目录下,并对其分模块管理,然后在 index.js 中统一暴露:

src/
├─ api/
│  ├─ system.js    # 系统相关接口
│  ├─ user.js      # 用户模块接口
│  ├─ product.js   # 商品模块接口
│  └─ index.js     # 统一导出入口

product. js 中编写方法:

// src/api/product.js
import request from "@/utils/request";/*** 获取商品基础分类列表*/
export const getBaseCategoryList = () => {return request({url: "/product/getBaseCategoryList",method: "get"});
};

然后统一暴露:

// index.js
export * as productAPI from "./product";

3.2 跨域解决

为什么会出现跨域?
  1. 浏览器的同源策略:是重要的安全机制,限制以下行为的跨域访问:

    • AJAX请求
    • DOM访问
    • Cookie/Storage读取
  2. 同源判定标准:协议+域名+端口 完全一致 才被允许访问

http://localhost:8080 ≠ https://localhost:8080 // 协议不同
http://a.com:8080 ≠ http://a.com:9090         // 端口不同
Vue项目解决方案(开发环境)
// vue.config.js
module.exports = {devServer: {proxy: {"/api": {                   // 匹配所有以/api开头的请求target: "http://gmall-h5-api.atguigu.cn",  // 后端服务器地址changeOrigin: true,       // 允许跨域}}}
};

注意: 配置完 vue.config.js 后需要重新启动。

配置项作用说明必要性
target指定代理目标服务器地址必选
changeOrigin将请求头中的host改为目标地址,绕过浏览器同源检测必选
pathRewrite重写请求路径,处理接口前缀差异可选

3.3 测试接口调用

main.js 中测试:

import {productAPI} from "@/api";  // 调用接口    
productAPI.getBaseCategoryList().then((data) => {  console.log(data);  
})

可以在控制台中看到,数据被成功输出:

![[Pasted image 20250123233827.png]]

4. 总结

通过对 Axios 进行二次封装,可以有效提升项目的开发效率和代码质量。在封装过程中,通过统一 API 路径、超时控制以及拦截器机制,不仅能集中管理请求与响应的逻辑,还能优化接口调用的可维护性和可扩展性。此外,通过模块化接口设计和跨域代理配置,我们能够更好地满足前后端分离架构下的开发需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6529.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】经典博弈论问题——巴什博弈 python

目录 前言巴什博弈(Bash Game)小试牛刀PN分析实战检验总结 前言 博弈类问题大致分为: 公平组合游戏、非公平组合游戏(绝大多数的棋类游戏)和 反常游戏 巴什博弈(Bash Game) 一共有n颗石子,两个人轮流拿,每次可以拿1~m颗…

软件开发学习路线——roadmap

推荐软件学习路线网站:https://roadmap.sh/get-started 有有关前端后端开发的学习路径,也有AI,移动开发,管理相关的学习路径 会有相应的词条路径,深入学习 右上角可以设置学习任务的完成情况

Moretl FileSync增量文件采集工具

永久免费: <下载> <使用说明> 我们希望Moretl FileSync是一款通用性很好的文件日志采集工具,解决工厂环境下,通过共享目录采集文件,SMB协议存在的安全性,兼容性的问题. 同时,我们发现工厂设备日志一般为增量,为方便MES,QMS等后端系统直接使用数据,我们推出了增量采…

9、Docker环境安装Nginx

一、拉取镜像 docker pull nginx:1.24.0二、创建映射目录 作用&#xff1a;是将docker中nginx的相关配置信息映射到外面&#xff0c;方便修改配置文件 1、创建目录 # cd home/ # mkdir nginx/ # cd nginx/ # mkdir conf html log2、生成容器 docker run -p 80:80 -d --name…

023:到底什么是感受野?

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请查看这里。 在前面介绍卷积算法时&#xff0c;一直在强调一个内容&#xff0c;那就是卷积算法的运算过程是—— 卷积核在输入图像上滑动扫描的过程。 在每一次扫描时&#xff0c;可以…

BGP(1)邻居建立,路由宣告

拓扑如图&#xff0c;配置地址&#xff0c;配置ospf并宣告相应地址 1、观察bgp邻居的建立 a R1和R3建立bgp邻居 抓包可以看到TCP的三次握手&#xff0c;端口号179 可以看到R1和R3成功建立了IBGP邻居 b 缺省情况下&#xff0c;BGP使用报文出接口作为TCP连接的本地接口&#x…

Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型

大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型&#xff0c;通常使用自监督学习方法通过大量无标签文本进行训练&#xff0c;是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…

【数据库】详解MySQL数据库中的事务与锁

目录 1.数据库事务 1.1.事务的四大特性 1.2.事务开启的方式 1.3.读一致性问题及其解决 2.MVCC解决读一致性问题原理 2.1.MVCC概念 2.2.准备环境 3.MySQL中的锁 3.1.行锁之共享锁 3.2.行锁之排它锁 1.数据库事务 数据库事务&#xff08;Transaction&#xff09;是一种…

C语言文件操作

本文重点&#xff1a; 什么是文件 文件名 文件类型 文件缓冲区 文件指针 文件的打开和关闭 文件的顺序读写 文件的随机读写 文件结束的判定 什么是文件 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数…

Ubuntu24.04初始化MySQL报错 error while loading shared libraries libaio.so.1

Ubuntu24.04初始化MySQL报错 error while loading shared libraries: libaio.so.1 问题一&#xff1a;libaio1不存在 # 提示libaio1不存在 [rootzabbix-mysql-master.example.com x86_64-linux-gnu]#apt install numactl libaio1 Reading package lists... Done Building depe…

『 实战项目 』Cloud Backup System - 云备份

文章目录 云备份项目服务端功能服务端功能模块划分客户端功能客户端模块划分 项目条件Jsoncpp第三方库Bundle第三方库httplib第三方库Request类Response类Server类Client类搭建简单服务器搭建简单客户端 服务端工具类实现 - 文件实用工具类服务器配置信息模块实现- 系统配置信息…

No.36 学习 | Python 函数:从基础到实战

最近我在学 Python 编程&#xff0c;今天可算是狠狠钻研了一把 Python 里的函数&#xff0c;感觉脑袋里的知识又充实了不少&#xff0c;赶紧来记一记。 一、Python函数基础概念 &#xff08;一&#xff09;pass语句&#xff1a;代码块的“占位符” 在编写代码时&#xff0c;有…

easyexcel读取写入excel easyexceldemo

1.新建springboot项目 2.添加pom依赖 <name>excel</name> <description>excelspringboot例子</description><parent> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId&…

Qt 5.14.2 学习记录 —— 십유 布局管理器

文章目录 1、QVBoxLayout2、QHBoxLayout3、QGridLayout4、QFormLayout5、QSpacerItem 布局管理器是为了让程序员不需要自己决定控件的绝对位置&#xff0c;而是通过布局管理器方便地放置 1、QVBoxLayout 垂直布局管理器 #include <QPushButton> #include <QVBoxLayo…

Markdown Viewer 浏览器, vscode

使用VS Code插件打造完美的MarkDown编辑器&#xff08;插件安装、插件配置、markdown语法&#xff09;_vscode markdown-CSDN博客 右键 .md 文件&#xff0c;选择打开 方式 &#xff08;安装一些markdown的插件) vscode如何预览markdown文件 | Fromidea GitCode - 全球开发者…

每日十题八股-2025年1月23日

1.快排为什么时间复杂度最差是O&#xff08;n^2&#xff09; 2.快排这么强&#xff0c;那冒泡排序还有必要吗&#xff1f; 3.如果要对一个很大的数据集&#xff0c;进行排序&#xff0c;而没办法一次性在内存排序&#xff0c;这时候怎么办&#xff1f; 4.面试官&#xff1a;你的…

H3C-无线WLAN配置案例(二层隧道转发)

目录 1.无线wlan产生背景:2.网络拓扑:3.网络简述:4.网络配置:4.1 网络基础配置4.2 无线wlan二层隧道转发配置4.3 无线wlan验证: 1.无线wlan产生背景: 无线WLAN&#xff08;无线局域网&#xff09;的产生背景主要源于以下几个方面的需求和技术发展&#xff1a;移动性和便捷性需…

HarmonyOS Next构建工具 lycium 原理介绍

HarmonyOS Next构建工具 lycium 原理介绍 背景介绍 HarmonyOS Next中很多系统API是以C接口提供&#xff0c;如果要使用C接口&#xff0c;必须要使用NAPI在ArkTS与C间交互&#xff0c;这种场景在使用DevEco-Studio中集成的交叉编译工具&#xff0c;以及cmake构建工具就完全够用…

设计模式的艺术-职责链模式

行为型模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解职责链模式 最常见的职责链是直线型&#xff0c;即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者&#xff0c;职责链模式可以将请求的处理者组织成一条链&#xff0c;并让请求沿着…

js学习笔记(2)

一、函数 1.JavaScript 函数语法 函数就是包裹在花括号中的代码块&#xff0c;前面使用了关键词 function&#xff1a; function functionname() {// 执行代码 } 当调用该函数时&#xff0c;会执行函数内的代码。 可以在某事件发生时直接调用函数&#xff08;比如当用户点…