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 路径、超时控制以及拦截器机制,不仅能集中管理请求与响应的逻辑,还能优化接口调用的可维护性和可扩展性。此外,通过模块化接口设计和跨域代理配置,我们能够更好地满足前后端分离架构下的开发需求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ceisum无人机巡检直播视频投射

接上次的视频投影,Leader告诉我这个视频投影要用在两个地方,一个是我原先写的轨迹回放那里,另一个在无人机起飞后的地图回显,要实时播放无人机拍摄的视频,还要能转镜头,让我把这个也接一下。 我的天&#x…

AI Agent:深度解析与未来展望

一、AI Agent的前世:从概念到萌芽 (一)早期探索 AI Agent的概念可以追溯到20世纪50年代,早期的AI研究主要集中在简单的规则系统上,这些系统的行为是确定性的,输出由输入决定。随着时间的推移,…

Spring MVC:HTTP 请求的参数传递2.0

本篇博客接上文: Spring MVC:Spring 前置知识 & HTTP 请求的参数传递1.0-CSDN博客 目录 1. 传递 json - RequestBody 1.1 json 1.1.1 什么是 json 1.1.2 json 的语法 1.1.3 json 和 Java 中对象的转换 1.1.4 json 优点 1.2 传递 json 2. 获取路径参数 -…

电子应用设计方案103:智能家庭AI浴缸系统设计

智能家庭 AI 浴缸系统设计 一、引言 智能家庭 AI 浴缸系统旨在为用户提供更加舒适、便捷和个性化的沐浴体验,融合了人工智能技术和先进的水疗功能。 二、系统概述 1. 系统目标 - 实现水温、水位和水流的精确控制。 - 提供多种按摩模式和水疗功能。 - 具备智能清洁…

设计模式的艺术-外观模式

结构性模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解外观模式 外观类充当了软件系统中的“服务员”,它为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。 外观模式(Facade Pattern)&a…

“““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““

主题与背景 本文主要介绍了如何在R语言中使用predict函数对已拟合的Cox比例风险模型进行新数据的预测和推理。Cox模型是一种常用的生存分析方法,用于评估多个因素对事件发生时间的影响。文章通过具体的代码示例展示了如何使用predict函数的不同参数来获取生存概率和…

戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法

最近有很多网友问,戴尔台式机怎么设置u盘启动,特别是近两年的戴尔台式机比较复杂,有些网友不知道怎么设置,其实设置u盘启动有两种方法,下面小编教大家戴尔电脑设置u盘启动方法。 戴尔电脑设置u盘启动方法一、戴尔进入b…

【React】 react路由

这一篇文章的重点在于将React关于路由的问题都给搞清楚。 一个路由就是一个映射关系,key:value。key是路径,value 可能是function或者component。 安装react-router-dom包使用路由服务,我这里想要用的是6版本的包,因此后面加”6&q…

隐私保护+性能优化,RyTuneX 让你的电脑更快更安全

RyTuneX 是一款专为 Windows 10 和 11 用户量身打造的系统优化工具,采用先进的 WinUI 3 框架开发,以其现代化的设计风格和强大的功能集合脱颖而出。这款工具不仅界面简洁美观,还提供了多样化的系统优化选项,旨在帮助用户最大化设备…

HTML新春烟花

系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心(简易版)7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心(双心版)1…

(回溯分割)leetcode93 复原IP地址

#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是&#xff1a;n个字符&#xff0c;递推n1后&#xff08;叶子节点&#xff…

关于ARM和汇编语言

一图流 ARM 计算机组成 输入设备 输出设备 存储设备 运算器 控制器 处理器读取内存程序执行的过程 取指阶段&#xff1a;控制器器通过地址总线向存储器发送想要获取的指令的地址编号&#xff0c;存储器将指定的指令发送给处理器 译码阶段&#xff1a;控制器对指令进行分…

个人学习 - 什么是Vim?

观我往旧&#xff0c;同我仰春 - 2025.1.10 声明 仅作为个人学习使用&#xff0c;仅供参考 本文所有解释参考笔者个人理解&#xff0c;最终目的是服务于自我学习&#xff0c; 如果你需要了解官方更规范的解释&#xff0c;请自行查阅 Vim 是什么 Vim 是一个强大的 文本编辑器…

python学习笔记2-简单数据类型

不同类型的变量可以进⾏的运算是不同的&#xff0c;所以必须理解变量的类型&#xff0c;python中数据类型可以分为&#xff1a; Number&#xff08;数值&#xff09; 整型&#xff08;int&#xff09; python3中只有int⼀种&#xff0c;可以表⽰整数&#xff0c;例如&#xf…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户&#xff0c;包括以下功能&#xff1a; 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…

Python的进程和线程

ref 接受几个设定: 进程是一家almost密不透风的公司,缅甸KK园区 线程里面工作的…人 进程**[园区]**内公共资源对于进程来说,可以共享. 别的园区[进程],一般不能和自己的园区共享人员资源,除非… 好的,现在再接受设定: 单个CPU在任一时刻只能执行单个线程&#xff0c;只有…

03垃圾回收篇(D4_彻底理解GC)

目录 一、浅析大促备战过程中出现的 fullGc&#xff0c;我们能做什么&#xff1f; 1. 什么是 JVM 的 GC? 2. 写代码的时候能做什么&#xff1f; 3. 测试能做啥 4. 知识小结 二、MinorGC、MajorGC、FullGC垃圾回收介绍 1. MinorGC &#xff08;新生代垃圾回收&#xff09…

软件测试 —— jmeter(2)

软件测试 —— jmeter&#xff08;2&#xff09; HTTP默认请求头&#xff08;元件&#xff09;元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组&#xff08;Stepping Thread Group&#xff09;参数解析总结 Response Times over TimeActive Thre…

分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法

分子动力学模拟&#xff08;Molecular Dynamics Simulation&#xff0c;简称MD&#xff09;是一种基于经典力学原理的计算物理方法&#xff0c;用于模拟原子和分子在给定时间内的运动和相互作用‌。以下是关于分子动力学模拟的一些核心术语和概念&#xff1a; ‌定义系统‌&am…

在 Windows 11 中为 SMB 3.x 文件共享协议提供 RDMA 支持

注&#xff1a;机翻&#xff0c;未校。 Enable SMB Direct in Windows 11 在 Windows 11 中启用 SMB Direct Provides RDMA support for the SMB 3.x file sharing protocol 为 SMB 3.x 文件共享协议提供 RDMA 支持 Vigneshwaran Vijayakumar November 3, 2024 Last Updat…