封装使用Axios进行前后端交互

Axios是一个强大的HTTP客户端,用于在Vue.js应用中进行前后端数据交互。本文将介绍如何在Vue中使用Axios,并通过一个企业应用场景来演示其实际应用。

Axios简介

公众号:Code程序人生,个人网站:https://creatorblog.cn

Axios是一个基于PromiseHTTP客户端,可以在浏览器和Nodejs中使用。它具有以下特点:

  • 支持Promise API,易于使用和集成。
  • 提供了强大的拦截器,用于在请求和响应过程中执行自定义逻辑。
  • 具有自动转换JSON数据的能力。
  • 能够处理请求和响应的取消操作。
  • 支持浏览器环境和Nodejs环境。

大家要有一个概念,Axios是一个独立的库,不依赖于任何框架,VueReactNodejs、原生,任何能用它的地方都可以用它。很多初学者有种错觉,认为VueAxios强挂钩。Axios是一个很强大的第三方库,不依赖于任何主体。

Axios基本用法

安装Axios

首先,确保你的项目中已经安装了Axios。如果没有安装,可以使用以下命令进行安装:

npm install axios

发送GET请求

以下是一个简单的Vue组件方法,用于发送GET请求并处理响应:

<template><div><button @click="fetchData">获取数据</button><div>{{ responseData }}</div></div>
</template><script>
import axios from 'axios';export default {data() {return {responseData: null,};},methods: {fetchData() {axios.get('https://www.baidu.com', {params: {query1: 'query1value1',query2: 'query2value2',}},headers: {'Authorization': 'Bearer token',}).then((response) => {this.responseData = response.data;}).catch((error) => {console.error('请求失败:', error);});},},
};
</script>

axios.get()的入参:

  • 第一个参数是要请求的url,必填。
  • 第二个参数是要传递的配置对象config,用于设置请求的各种选项,例如请求头、请求参数、超时设置等,GET请求要传递的query参数要放到params属性下,选填。

在上述示例中,我们导入了Axios并使用axios.get()方法发送GET请求。响应数据存储在responseData中。

发送POST请求

如果需要发送POST请求,可以使用axios.post()方法:

<script>
import axios from 'axios';export default {// ...其他组件选项methods: {sendData() {const params = {key1: 'value1',key2: 'value2',};axios.post('https://your-post-api-url', params, {headers: {'Content-Type': 'application/json',}}).then((response) => {console.log('成功发送数据:', response.data);}).catch((error) => {console.error('请求失败:', error);});},},
};
</script>

axios.post()的入参:

  • 第一个参数是要请求的url,必填。
  • 第二个参数data,表示要发送的请求数据。通常在向服务器提交数据时使用,例如表单数据或JSON数据,选填。
  • 第三个参数config,用于设置请求的各种选项,比如headers等,选填。

上述示例中,我们使用axios.post()发送POST请求,同时传递了需要发送的数据对象。

Axios的进阶用法

拦截器

Axios的拦截器功能允许我们在请求发送前和响应返回后执行自定义操作。例如,你可以在请求中添加认证信息、记录日志等。以下是一个示例:

// 添加请求拦截器
axios.interceptors.request.use((config) => {// 在请求发送前执行的操作,例如添加认证信息// config.headers['Authorization'] = `Bearer ${token}`;return config;},(error) => {return Promise.reject(error);}
);// 添加响应拦截器
axios.interceptors.response.use((response) => {// 在响应返回后执行的操作,例如处理响应数据return response.data;},(error) => {// 处理响应错误return Promise.reject(error);}
);

错误处理

Axios中,你可以使用.catch()来处理请求或响应的错误。通常,这包括网络错误、HTTP状态码错误以及后端返回的自定义错误信息。

axios.get('https://www.baidu.com').then((response) => {// 处理成功响应}).catch((error) => {if (error.response) {// 处理HTTP错误状态码console.error('HTTP错误:', error.response.status);} else if (error.request) {// 处理请求没有响应的情况console.error('请求无响应');} else {// 处理其他错误console.error('其他错误:', error.message);}});

Axios整体封装

为什么要封装Axios

封装Axios有以下几个重要的原因:

  1. 代码重用性:通过封装Axios,我们可以将HTTP请求的逻辑集中在一个地方,以便在整个应用程序中重用。
  2. 错误处理:封装可以使错误处理变得更加一致,包括网络错误、HTTP状态码错误以及后端返回的自定义错误信息。
  3. 拦截器Axios的拦截器功能可以用于在请求发送前和响应返回后进行操作,如添加请求头、认证、日志记录等。
  4. 安全性:通过封装,可以更容易地添加安全性措施,例如CSRF令牌的自动附加。

封装Axios

首先,我们将创建一个独立的Axios实例并进行封装。在Vue项目中,通常在一个单独的文件中完成此任务,例如axios.js

// axios.jsimport axios from 'axios';const instance = axios.create({baseURL: 'https://api.api.api.com', // 设置后端API的基本URLtimeout: 10000, // 设置请求超时时间
});// 请求拦截器
instance.interceptors.request.use((config) => {// 在请求发送前可以进行一些操作,如添加认证信息// config.headers['Authorization'] = `Bearer ${token}`;return config;},(error) => {return Promise.reject(error);}
);// 响应拦截器
instance.interceptors.response.use((response) => {// 在响应返回后可以进行一些操作,如处理响应数据return response.data;},(error) => {// 处理响应错误,可以根据不同的HTTP状态码采取不同的处理策略if (error.response) {// 处理HTTP错误状态码const status = error.response.status;if (status === 401) {// 处理未授权错误} else if (status === 404) {// 处理资源未找到错误} else {// 处理其他HTTP错误}} else if (error.request) {// 处理请求没有响应的情况} else {// 处理其他错误}return Promise.reject(error);}
);export default instance;

在Vue组件中使用封装的Axios

现在,我们可以在Vue组件中轻松地使用封装后的Axios实例。首先,确保在组件文件中导入封装的Axios

import axios from './axios'; // 导入封装的Axios实例

然后,在组件中使用Axios发送请求:

export default {methods: {fetchData() {axios.get('/data') // 发送GET请求,'/data'是相对于基本URL的相对路径.then((response) => {// 处理响应数据}).catch((error) => {// 处理错误});},},
};

这是一个简单的示例,展示了如何在Vue组件中使用封装的Axios实例来发送GET请求。

常见应用场景

身份验证和授权

在企业应用中,常见的用例之一是处理身份验证和授权。你可以在Axios的拦截器中添加认证信息,以确保只有授权用户可以访问受保护的资源。

错误处理和日志记录

企业级应用通常需要良好的错误处理和日志记录机制。通过Axios的拦截器,你可以集中处理错误,记录错误信息,以便后续分析和修复。

文件上传和下载

对于文件上传和下载,Axios同样适用。你可以使用axios.post()来上传文件,使用axios.get()来下载文件,并处理相应的响应数据。

总结

Axios是一个功能强大的HTTP客户端,可以帮助你在任何应用中进行前后端数据交互。

通过封装和使用Axios,你可以更轻松地处理请求、响应、错误和拦截器等各方面的问题。

在企业应用中,它可以帮助你构建稳健和可维护的前端代码,以应对复杂的需求和场景。

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

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

相关文章

什么是鉴权?一篇文章带你了解postman的多种方式

一、什么是鉴权&#xff1f; 鉴权也就是身份认证&#xff0c;就是验证您是否有权限从服务器访问或操作相关数据。发送请求时&#xff0c;通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就是一个门禁&#xff0c;您想要进入室内&#xff0c;必须通过…

2023-09-19力扣每日一题

链接&#xff1a; 2560. 打家劫舍 IV 题意 n个数字&#xff0c;相邻不能选&#xff0c;选择的结果为 选中的数字中的最大数字&#xff0c;要求最少选k个数字 求这个结果最小能是多少 解&#xff1a; 怎么就从DP变成二分了呢&#xff1f; 关键字&#xff1a;最大的最小 …

一个Qt鼠标透传场景与事件过滤器的用法

一个Qt鼠标透传场景与事件过滤器的用法 最近工作中遇到一个开发场景&#xff0c;将一个QWidget控件&#xff08;称为控件A&#xff09;放入QScrollArea&#xff0c;该控件A重写了QWidget::wheelEvent&#xff0c;根据鼠标滚轮事件缩放内部的绘制视图。当控件过大时&#xff0c…

【Redis】深入探索 Redis 主从结构的创建、配置及其底层原理

文章目录 前言一、对 Redis 主从结构的认识1.1 什么是主从结构1.2 主从结构解决的问题 二、主从结构创建2.1 配置并建立从节点2.2.1 从节点配置文件2.2.2 启动并连接 Redis 主从节点2.2.3 SLAVEOF 命令2.2.4 断开主从关系 2.2 查看主从节点的信息2.2.1 INFO REPLICATION 命令2.…

(leetcode)单值二叉树

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 画图与分析&#xff1a; 题目&#xff1a; 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&…

树形DP杂题

引 对老师布置的题目稍微记录一下吧 也算对树形 D P DP DP 的巩固 T1 Ostap and Tree 题目传送门 由于有 距离 k 距离k 距离k 的限制&#xff0c;设计二维 d p dp dp 设计状态&#xff1a; f i , j : i 的子树内&#xff0c;离 i 最近的染色点与 i 距离为 j 且若 j <…

数字孪生生态链入门

数字孪生生态链入门 数字孪生体平台遵循双边市场的演进规律由于数字技术具有非常低的边际成本翼络数字提供的智能杆数字孪生体解决方案展示了数字孪生体应用开发的技巧。数字孪生体应用还有“鸡与蛋悖论”目前比较成功的开发者创新生态都是在消费互联网领域 作为一种基于开放架…

【第四阶段】kotlin语言的构造函数学习

1.主构造函数 package Kotlin.Stage4 //主构造函数&#xff0c;规范来说&#xff0c;都是增加_xxx的形式&#xff0c;临时的输入类型&#xff0c;不能直接用。需要接收下来&#xff0c;成为变量才能用。 class TestBase(_name:String,_sex:Char,_age:Int,_info:String){ //主…

科学实验设计的关键要素:如何确保研究结果的可靠性和有效性

设计科学实验时&#xff0c;确保研究结果的可靠性和有效性是至关重要的。以下是一些关键要素&#xff1a; 1. 有明确的研究目的和问题&#xff1a;在设计实验之前&#xff0c;确保你清楚地了解你的研究目的和要解决的科学问题。这将有助于你设计出符合目标的实验方案。 2. 控…

深入理解算法的时间复杂度

文章目录 时间复杂度的定义时间复杂度的分类时间复杂度分析常见数据结构和算法的时间复杂度常见数据结构常见算法 常见排序算法说明冒泡排序(Bubble Sort)快速排序(Quick Sort)归并排序(Merge Sort)堆排序(Heap Sort) 时间复杂度的定义 时间复杂度就是一种用来描述算法在输入规…

9_19,洛谷刷题记录

要做一株小草&#xff0c;默默努力 求细胞数量 #include<iostream> using namespace std; //对每个点进行搜索&#xff0c;dfs/bfs&#xff0c;将搜过的点标记出来&#xff0c;然后记录次数 //搜索几次&#xff0c;就有几个细胞 const int N110; int g[N][N],st[N][N]; …

平均精度(AP)

什么是平均精度(AP) 平均精度 (AP)并不是精度 (P)的平均值。 平均精度 (AP) 是按类别计算的。 mAP&#xff08;mean average precision&#xff09;是一个平均值&#xff0c;常用作目标检测中的检测精度指标mAP 指标通过对于一个平均目标来检测任务中多个目标所对应不同 AP&a…

linux中的开发工具

在刚开始使用linux的时候&#xff0c;我们需要在系统上写一些简单的代码&#xff0c;来熟悉环境以及各种指令 并且熟悉属于linux的一套开发的环境&#xff0c;而这对于c来说需要三个软件就可以进行简单的编码 和使用&#xff0c;让我们来认识一下下列工具&#xff0c;以及工具的…

【链表】反转链表 II-力扣 92 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

elasticsearch bulk 批量操作

1&#xff1a;bulk 是 elasticsearch 提供的一种批量增删改的操作API bulk 对 JSON串 有着严格的要求。每个JSON串 不能换行 &#xff0c;只能放在同一行&#xff0c;同时&#xff0c; 相邻的JSON串之间必须要有换行 &#xff08;Linux下是\n&#xff1b;Window下是\r\n&#…

避雷器雷击计数器检验

试验目的 由于密封不良&#xff0c; 放电计数器在运行中可能进入潮气或水分&#xff0c; 使内部元件锈蚀&#xff0c;导致计数器不能正确动作&#xff0c; 因此需定期试验以判断计数器是否状态良好、 能否正常动作&#xff0c; 以便总结运行经验并有助于事故分析。 带有泄漏电…

Git学习笔记6

Github分支开发&#xff1a; 第1步&#xff1a;在github上创建一个新的dev分支&#xff1a; 更新了微信的PC版本&#xff0c;发现默认的箭头比以前加粗了&#xff0c;变得更好看了。 create branch: dev from master。 切换到该分支&#xff0c;看到里面的内容跟master分支的…

Spring Boot + Vue的网上商城之springsecurity+jwt+redis实现用户权限认证实现

Spring Boot Vue的网上商城之springsecurityjwtredis实现用户权限认证实现 在网上商城项目中&#xff0c;用户的安全性是非常重要的。为了实现用户权限认证和安全校验&#xff0c;我们可以使用Spring Security、JWT和Redis来实现。本篇博客将详细介绍后端和前台的实现过程&am…

Vue3 菜鸟入门(三)超详细:引用外部依赖、组件、路由

【学习笔记】Vue3 菜鸟入门&#xff08;三&#xff09;超详细&#xff1a;引用外部依赖、组件、路由 关键词&#xff1a;Vue 、Vue 3、Java、Spring Boot、Idea、数据库、一对一、培训、教学本文主要内容含Vue 基本框架 模板语法、指令计划1小时完成&#xff0c;请同学尽量提前…

计算机是如何工作的(上篇)

计算机发展史 世界上很多的高科技发明,来自于军事领域 计算机最初是用来计算弹道导弹轨迹的 弹道导弹 ~~国之重器,非常重要 两弹一星 原子弹,氢弹,卫星(背后的火箭发射技术) 计算弹道导弹轨迹的计算过程非常复杂,计算量也很大 ~~ 但是可以手动计算出来的(当年我国研究两弹一…