前言:

        在现代前端开发中,网络请求是不可避免的核心功能之一。无论是获取后端数据、提交表单信息,还是与第三方 API 交互,高效且可靠的 HTTP 请求库至关重要。axios 作为一款基于 Promise 的 HTTP 客户端,凭借其简洁的 API 设计、强大的拦截器机制以及广泛的浏览器和 Node.js 兼容性,成为开发者首选的工具之一。

        axios 不仅提供了基础的 GET、POST 等请求方法,还支持请求和响应的拦截、取消请求、自动转换 JSON 数据等特性,极大简化了开发流程。然而,在实际项目中直接使用原生 axios 可能会导致代码冗余、维护困难等问题。通过合理的封装,可以统一处理错误、设置全局配置、管理请求与响应逻辑,从而提升代码的可读性和可维护性。

        本文将详细介绍 axios 的基本使用方法,并探讨如何基于实际业务需求进行二次封装,使其更符合项目规范,同时兼顾灵活性和扩展性。无论是初学者还是有一定经验的开发者,都能从中获得实用的技巧和最佳实践。

1.axios请求接口

1.下载

npm install axios -S

2.引入

import axios from 'axios';

3.使用

        axios有两种使用方式,如下:

1.axios.'请求方式'
比如:axios.get()  axios.post2.axios({url:'请求url',method:'请求方式,不给默认get请求',data:'post传值方式',params:'get传值方式'
}).then(res => {console.log( res ); // 后端给前端的数据
})

        比如我在优启梦API上找的免费API接口写的例子,如下:

<template><div class="app">{{ data }}</div>
</template><script setup>
import axios from 'axios';
import { onMounted, ref } from 'vue';const data = ref('')onMounted(() => {axios({url:'https://api.uomg.com/api/rand.qinghua?format=json',method:'get'}).then(res=>{data.value = res.data.content})
})
</script>

2.axios的二次封装

        axios的二次封装解决了什么问题:

        1.请求的url统一管理。

        2.配置统一的请求头。

        说白了axios的二次封装是为了方便管理和维护,首先我们需要在src目录下去创建一个工具文件夹(utils),在该文件夹下去创建一个js文件用来封装axios,命名为resquest.js。

        创建好之后,第一步就是要引入axios。第二步需要创建axios对象,用来管理统一的url路径。第三步需要设置请求拦截器,它可以在请求成功前去完成一些操作,比如添加请求头、设置loading动画等等。第四步是设置响应拦截器,它是请求完成了,后端返回给前端的数据,可以去处理http状态码等等。最后将我们创建的axios对象导出即可。基本代码如下:

// 1.引入axios
import axios from "axios";// 2.创建axios对象
const service = axios.create({baseURL: 'https://api.uomg.com'
});// 3.设置请求拦截器 请求前进行一些操作 比如添加请求头、设置loading动画等
service.interceptors.request.use(config => {return config;
}, err => {Promise.reject(error)
})// 4.设置响应拦截器 后端给前端返回数据 可以处理http状态码
service.interceptors.response.use((response) => {if (response.status === 200) {return response.data}},err => {return Promise.reject(new Error(err.response.data))}
)export default service

        封装好之后,我们就可以对请求代码进行修改,代码如下:

<template><div class="app">{{ data }}</div>
</template><script setup>
import { onMounted, ref } from 'vue';
import request from './utils/request';const data = ref('')onMounted(() => {request({// 只需要添加参数url: '/api/rand.qinghua?format=json',}).then(res => {data.value = res.content})
})
</script>

3.解偶

        当项目中可能一个请求会在多个地方用到是,就需要统一管理。

        在utils文件夹下新建api文件夹的目的在于将接口请求与业务逻辑彻底解耦,实现接口的集中管理和复用。这种架构设计主要解决以下问题:

  1. 接口复用性:避免同一接口在不同组件重复定义
  2. 维护便捷性:接口路径或参数变更时只需修改单个文件
  3. 语义化调用:通过命名清晰的函数替代原始URL字符串
  4. 类型提示支持:配合TypeScript可获得更好的代码提示
import request from '../request';export function getQingHua(){return request({url: '/api/rand.qinghua?format=json',})
}

        修改原组件代码为:

<template><div class="app">{{ data }}</div>
</template><script setup>
import { onMounted, ref } from 'vue';
import { getQingHua } from './utils/api/course';const data = ref('')onMounted(() => {getQingHua().then(res => {data.value = res.data})
})
</script>

这种架构设计使项目具备以下优势:

  • 接口与业务逻辑完全分离
  • 团队成员协作更规范
  • 接口变更影响范围可控
  • 代码可测试性增强
  • 类型系统更完善

结语:

        axios 作为现代前端开发的核心工具,其灵活性和强大功能为 HTTP 请求处理提供了高效解决方案。通过原生使用和二次封装,开发者能够根据项目需求实现从基础到进阶的请求管理。封装后的代码不仅提升了可维护性,还通过统一配置和拦截机制增强了健壮性。接口解耦进一步优化了项目结构,使团队协作更加规范。掌握这些技巧将显著提升开发效率和代码质量,为复杂应用奠定坚实基础。

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

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

相关文章

github上部署自己的静态项目

前置知识1、要在github部署项目要提交打包后的静态文件(html,css&#xff0c;js)到仓库里2、我们看下github所提供给我们的部署方式有啥&#xff0c;如下所见&#xff1b;要么是/root文件夹&#xff08;就说仓库里全是打包后的产物&#xff1a;html,css&#xff0c;js要全部放到…

能源管理综合平台——分布式能源项目一站式监控

综合性的能源企业管理面临着项目多、分布散、信息孤岛等问题&#xff0c;分布式的多项目能源在线监控管理平台是一种集成了多个能源项目的数据采集、监控、分析和管理的系统。平台集成GIS能力&#xff0c;能够展示项目的整体分布态势&#xff0c;对不同地点、不同类型的能源项目…

修改阿里云vps为自定义用户登录

win系统上找到控制面板-->用户账户-->更改账户类型点击更改账户类型&#xff0c;此时我们看到vps的默认管理员账户Administrator。为了防止vps被别人使用默认账户Administrator攻击&#xff0c;我们添加一个用户账户&#xff0c;点击添加用户账户。 用户名建议奇葩点&…

Linux: perf: debug问题一例,cpu使用率上升大约2%;多线程如何细化cpu及perf数据分析

文章目录 前提面临的问题内核级别函数的差别继续debug总结根据pid前提 一个进程安置在一个CPU上,新功能上线之后,固定量的业务打起来,占用的CPU是42%。之前没有新功能的情况下,CPU占用是40%。差了大约2%。而且这个进程里的线程数非常多,有50多个线程。从差距看变化不大,…

计算阶梯电费

实现一个 Python 程序&#xff0c;根据使用的电量&#xff08;从控制台中让用户输入&#xff09;计算需要交的电费&#xff0c;电量分为两个阶梯&#xff0c;小于 200 度和大于 200 度&#xff0c;如果电量小于等于 200 度&#xff0c;电价就是 0.5 元/度&#xff0c;如果电量大…

替代MT6701,3D 霍尔磁性角度传感器芯片

KTH5502 是一款基于垂直霍尔技术的高精度绝对角度传感器芯片&#xff0c;支持全角度&#xff08;0–360&#xff09;测量。 芯片内部集成 X、Y 轴的垂直霍尔元件和 Z 轴的水平霍尔元件&#xff0c;能够同时感知磁场在 X、Y、Z 三个 方向的变化。得益于垂直霍尔技术优异的正交匹…

华为 Mate 80 影像配置揭秘:硬软双升

7 月 7 日&#xff0c;知名数码博主爆料了华为 Mate 80 系列的影像配置&#xff0c;引发广泛关注。从曝光信息来看&#xff0c;Mate 80 系列在影像方面延续华为的技术探索&#xff0c;通过硬件升级与算法优化&#xff0c;力图为用户带来更出色的拍摄体验。​ 爆料显示&#xff…

Android studio升级AGP需要注意哪些

deep seek回答&#xff1a; 深度思考完成 用时26秒 嗯&#xff0c;用户询问的是在Android Studio中升级AGP需要注意哪些事项。这个问题很实用&#xff0c;因为AGP升级确实是个容易踩坑的过程。让我看看搜索结果里有什么关键信息。 首先注意到搜索结果里有几个高可信度的资料专…

MapReduce数据处理过程2万字保姆级教程

目录 1. MapReduce 的核心思想:分而治之的艺术 2. Hadoop MapReduce 的架构:从宏观到微观 3. WordCount 实例:从代码到执行的完整旅程 4. 源码剖析:Job.submit 的魔法 5. Map 任务的执行:从分片到键值对 6. Shuffle 阶段:MapReduce 的幕后英雄 7. Reduce 任务的执行…

Rust单例模式:OnceLock的使用指南

想象一下你在构建一个需要全局数据库连接的Rust应用。传统语言里&#xff0c;单例模式常常伴随着锁的沉重和初始化竞态的焦虑。但在Rust的世界里&#xff0c;OnceLock就像个轻巧的守门人&#xff0c;只允许一次安全的通行。 简洁的OnceLock实现 看看这段代码如何优雅地解决单…

JavaScript性能优化实战:表格控件高效开发指南

引言 在现代Web应用开发中&#xff0c;电子表格功能已成为数据分析、报表展示等场景的核心需求。SpreadJS作为一款高性能的纯前端电子表格控件&#xff0c;能够完美兼容Excel文件格式&#xff0c;支持百万级数据量和复杂公式计算。然而随着数据规模的增长和业务逻辑的复杂化&a…

RWA(现实世界资产)代币化系统构建指南:合规、跨境与机构级解决方案

——金融科技公司机构市场拓展战略报告前言&#xff1a;RWA代币化的机构化浪潮与市场机遇 截至2025年6月&#xff0c;全球RWA&#xff08;Real World Assets&#xff09;链上规模突破240亿美元&#xff0c;3年增长超380%&#xff0c;成为仅次于稳定币的增速第二赛道。贝莱德、摩…

QML Label组件

QML中的Label组件是构建用户界面时最常用的文本显示控件之一&#xff0c;它继承自Text元素但提供了更丰富的UI特性和主题集成支持。本文将全面介绍Label的核心功能、属性配置、使用技巧以及与Text组件的区别&#xff0c;帮助开发者高效构建美观的文本界面。 Label组件基础 La…

使用 GDB 调试 Redis 服务进程指南

1. 准备工作 安装 GDB 在大多数 Linux 发行版上&#xff0c;执行&#xff1a; sudo apt-get update sudo apt-get install gdb确保有足够磁盘空间 Core dump 文件可能较大&#xff0c;请提前检查磁盘剩余空间&#xff1a; df -h .可选&#xff1a;使用 tmux 或 screen 为避免 S…

深度学习-环境准备

安装python&#xff0c;miniconda(最后步骤关于python环境变量部分全部勾选)&#xff0c;pycharm 关于离线安装numpy和matplotlib&#xff08;我的环境连不上网&#xff09; 我们先去 PyPI The Python Package Index 下载离线包 在搜索框搜索你的包名称&#xff0c;这里是 m…

记录在Windows系统用Python 3.12环境实现Nuitka过程

内容只提供Windows 10 与 Windows 11 下&#xff0c;搭建 Python 3.12 环境&#xff0c;并使用 Nuitka 将脚本打包为可执行文件的详细流程。全文分为以下几部分&#xff1a; 准备工作与系统要求 安装 Python 3.12 配置环境变量与 pip 创建虚拟环境&#xff08;推荐&#xff…

深入解析C#接口声明:核心规则与最佳实践

接口声明的核心约束 禁止包含的成员类型 ❌ 数据成员&#xff08;字段、常量&#xff09;❌ 静态成员&#xff08;静态方法/属性&#xff09; 理由&#xff1a;接口仅定义契约&#xff0c;不涉及实现或状态存储。 允许的成员类型&#xff08;仅非静态函数成员&#xff09; ✅ 方…

Javaweb - 10.6 请求转发和响应重定向

目录 概述 请求转发 逻辑图 测试代码 总结 响应重定向 逻辑图 测试代码 总结 完&#xff01; 概述 什么是请求转发和响应重定向&#xff1f; 请求转发和响应重定向&#xff0c;是 web 应用中&#xff0c;间接访问项目资源的两种手段&#xff0c;也是 Servlet 控制页…

severb

题目一 解决方法&#xff1a; 题目二&#xff1a; 解决方法&#xff1a; 题目三&#xff1a; xfs&#xff1a; ext&#xff1a; 题目四&#xff1a; 解决方法&#xff1a; fdisk中命令&#xff1a;n&#xff08;新建&#xff09; 主分区 、id、起始块都为默认、结束块为756M t…

Hbase2.6.2集群部署(最新版)

配套版本安装&#xff1a; Hadoop 3.4.1 Zookeeper3.9.3 Hbase2.6.2 前置安装 Linux环境下部署Zookeeper3.9.3(最新版)集群部署-CSDN博客 Linux环境下Hadoop3.4.1(最新版本)集群部署-CSDN博客 一、文件解压 cd /usr/local/soft/ tar -zxvf hbase-2.6.2-bin.tar.gz 二、修改启…