Axios 详解与使用指南
Axios 详解与使用指南
1. Axios 简介
Axios 是一个基于 Promise 的 HTTP 客户端,能够在浏览器和 Node.js 环境中运行。它提供了一种简便的方式来执行 HTTP 请求,并支持多种请求方法,如 GET、POST、PUT、DELETE 等。Axios 的配置灵活,支持请求和响应拦截器、取消请求、并发请求处理等功能,使其成为现代 Web 开发中非常流行的选择。
2. Axios 特性
- 基于 Promise:Axios 完全支持
Promise,使得异步操作更加直观,特别是在使用async/await时。 - 支持多种请求方式:支持常见的 HTTP 请求方法,满足不同的请求需求。
- 浏览器与 Node.js 兼容:Axios 可同时在前端和后端项目中使用。
- 拦截器:提供请求和响应拦截器,允许在请求或响应到达之前进行处理。
- 自动转换 JSON 数据:自动将 JSON 数据转换为 JavaScript 对象。
- 请求取消:支持通过
CancelToken取消请求。 - 并发请求处理:支持
axios.all等方法,处理多个并发请求。
3. Axios 安装与引入
3.1 使用 npm 安装
npm install axios
3.2 使用 Yarn 安装
yarn add axios
3.3 在项目中引入
在 ES6 模块化的项目中使用:
import axios from 'axios';
或者在 CommonJS 模块化的项目中使用:
const axios = require('axios');
4. Axios 基本使用
4.1 GET 请求
axios.get('/api/user', {params: {ID: 12345}
})
.then(response => {console.log(response.data);
})
.catch(error => {console.error(error);
});
4.2 POST 请求
axios.post('/api/user', {firstName: 'John',lastName: 'Doe'
})
.then(response => {console.log(response.data);
})
.catch(error => {console.error(error);
});
4.3 并发请求
function getUser() {return axios.get('/api/user');
}function getProfile() {return axios.get('/api/profile');
}axios.all([getUser(), getProfile()])
.then(axios.spread((user, profile) => {console.log('User:', user.data);console.log('Profile:', profile.data);
}))
.catch(error => {console.error(error);
});
5. Axios 配置项
5.1 全局配置
Axios 提供了全局配置,允许您设置默认的请求行为。您可以通过 axios.defaults 来设置全局配置,这些配置会应用到每个请求中。
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.timeout = 10000;
axios.defaults.headers.common['Authorization'] = 'Bearer token';
axios.defaults.headers.post['Content-Type'] = 'application/json';
5.2 请求配置
在发送请求时,可以通过配置对象自定义请求行为。这些配置项包括但不限于以下内容:
- url:请求的 URL,默认为请求的相对路径。
- method:请求方法,如
get、post等,默认值为get。 - baseURL:将自动加在
url前面,除非url是一个绝对 URL。 - headers:自定义请求头。
- params:GET 请求的 URL 参数,PUT、POST 请求的
data会自动序列化为查询字符串。 - data:PUT、POST、PATCH 请求的请求体。
- timeout:请求超时设置(毫秒),如果请求超时,将触发
timeout错误。 - responseType:返回的数据格式,如
json、blob、document、arraybuffer、text、stream。 - withCredentials:表示跨域请求时是否需要使用凭证,默认为
false。
const config = {// 请求的 URLurl: '/api/user',// 请求方法method: 'get', // 可以是 'get', 'post', 'put', 'delete', 'patch', 'options', 'head'// 基础 URL,将自动加在 `url` 前面baseURL: 'https://api.example.com',// 自定义请求头headers: {'Content-Type': 'application/json','Authorization': 'Bearer token','X-Custom-Header': 'foobar'},// URL 参数params: {ID: 12345},// POST、PUT、PATCH 请求的请求体data: {firstName: 'John',lastName: 'Doe'},// 请求超时设置(毫秒)timeout: 5000, // 超时时间设置为5秒// 响应的数据类型responseType: 'json', // 选项有 'json', 'blob', 'document', 'arraybuffer', 'text', 'stream'// `transformRequest` 允许在请求数据发送到服务器之前对其进行修改// 该函数只适用于请求方法 'PUT', 'POST', 'PATCH'transformRequest: [(data, headers) => {// 对 data 进行任意转换处理data.firstName = data.firstName.toUpperCase();return JSON.stringify(data);}],// `transformResponse` 允许在响应数据传递给 then 或 catch 之前对其进行修改transformResponse: [(data) => {// 对 data 进行任意转换处理data = JSON.parse(data);data.fullName = `${data.firstName} ${data.lastName}`;return data;}],// 是否跨站点访问控制请求,默认为 falsewithCredentials: false,// 自定义参数序列化paramsSerializer: params => {return new URLSearchParams(params).toString();},// 取消请求cancelToken: new axios.CancelToken(cancel => {// 在请求的执行过程中,可调用 `cancel` 函数来取消请求// 示例:cancel('Request canceled by the user.');}),// 验证状态码是否合法,返回 true 表示合法validateStatus: status => {return status >= 200 && status < 300; // 默认的合法范围是 200-299},// 自定义处理上传进度事件onUploadProgress: progressEvent => {console.log('Upload progress:', progressEvent.loaded);},// 自定义处理下载进度事件onDownloadProgress: progressEvent => {console.log('Download progress:', progressEvent.loaded);}
};// 发送请求
axios(config).then(response => {console.log('Response:', response.data);}).catch(error => {console.error('Error:', error);});
5.3 请求与响应数据转换
在 Axios 中,可以通过配置 transformRequest 和 transformResponse 来对请求数据和响应数据进行转换。这两个配置项分别是请求前和响应后执行的数组函数,数组中的每个函数都会依次执行。
axios.post('/api/user', {firstName: 'John',lastName: 'Doe'
}, {transformRequest: [(data, headers) => {// 在发送请求前,您可以对 data 进行自定义处理data.firstName = data.firstName.toUpperCase();return JSON.stringify(data);}],transformResponse: [(data) => {// 在响应到达客户端之前,您可以对 data 进行自定义处理data = JSON.parse(data);data.fullName = `${data.firstName} ${data.lastName}`;return data;}]
})
.then(response => {console.log(response.data);
})
.catch(error => {console.error(error);
});
5.4 异步与同步请求
Axios 默认是异步请求,基于 Promise。通过 async/await,您可以将异步请求写成同步代码的形式:
async function getUser() {try {const response = await axios.get('/api/user');console.log(response.data);} catch (error) {console.error(error);}
}getUser();
5.5 请求取消
Axios 提供了取消请求的功能,通过 CancelToken 来实现。您可以在需要取消请求时,调用 cancel 方法。
const CancelToken = axios.CancelToken;
let cancel;axios.get('/api/user', {cancelToken: new CancelToken(function executor(c) {cancel = c;})
})
.then(response => {console.log(response.data);
})
.catch(error => {if (axios.isCancel(error)) {console.log('Request canceled', error.message);} else {console.error(error);}
});// 取消请求
cancel('Operation canceled by the user.');
6. Axios 拦截器
6.1 请求拦截器
请求拦截器可以在请求发送前对其进行处理。例如,您可以在每次请求前自动添加 token:
axios.interceptors.request.use(config => {config.headers.Authorization = 'Bearer token';return config;
}, error => {return Promise.reject(error);
});
6.2 响应拦截器
响应拦截器可以在服务器响应到达客户端前对其进行处理。例如,您可以统一处理错误信息:
axios.interceptors.response.use(response => {return response;
}, error => {if (error.response.status === 401) {console.error('未授权,请登录');}return Promise.reject(error);
});
注意:在使用拦截器时,必须确保拦截器函数有
return。否则,拦截器处理后的结果无法传递给下一个拦截器或最终的请求/响应处理。
7. 在项目中的封装与使用
7.1 封装 Axios 实例
在大型项目中,通常会封装 Axios 实例来处理通用配置和拦截器。
import axios from 'axios';const apiClient = axios.create({baseURL: 'https://api.example.com',timeout: 10000,headers: {'Content-Type': 'application/json','Authorization': 'Bearer token'}
});// 请求拦截器
apiClient.interceptors.request.use(config => {// 在发送请求前可以做一些处理return config;
}, error => {return Promise.reject(error);
});// 响应拦截器
apiClient.interceptors.response.use(response => {// 在响应到达客户端前可以做一些处理return response.data;
}, error => {return Promise.reject(error);
});export default apiClient;
7.2 处理接口与错误
在封装的 Axios 实例中,可以定义通用的错误处理逻辑,确保应用程序中的所有 API 请求都具有一致的错误处理方式。
apiClient.interceptors.response.use(response => {return response;
}, error => {// 自定义错误处理const { status } = error.response;switch (status) {case 401:console.error('未授权,请重新登录');break;case 404:console.error('请求资源未找到');break;default:console.error('请求错误', error.message);}return Promise.reject(error);
});
7.3 基本使用
在这个基础上,可以封装常见的 API 请求方法,比如 GET、POST、PUT、DELETE 等,提供更简洁的接口。
const api = {get(url, params = {}, config = {}) {return apiClient.get(url, {params,...config});},post(url, data = {}, config = {}) {return apiClient.post(url, data, config);},put(url, data = {}, config = {}) {return apiClient.put(url, data, config);},delete(url, params = {}, config = {}) {return apiClient.delete(url, {params,...config});}
};export default api;
7.4 通用方法
const http = function(config) {return apiClient(config)
};export default http;
相关文章:
Axios 详解与使用指南
Axios 详解与使用指南 1. Axios 简介 Axios 是一个基于 Promise 的 HTTP 客户端,能够在浏览器和 Node.js 环境中运行。它提供了一种简便的方式来执行 HTTP 请求,并支持多种请求方法,如 GET、POST、PUT、DELETE 等。Axios 的配置灵活&#x…...
深度学习 —— 个人学习笔记20(转置卷积、全卷积网络)
声明 本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。 三十九、转置卷积 import torch from torch import nndef trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[…...
解决Mac系统Python3.12版本pip安装报错error: externally-managed-environment的问题
遇到的问题 在Mac安装了Python3.12.x版本(3.12.3、3.12.4)后,当尝试pip3 install xxx的时候,总是报错:error: externally-managed-environment error: externally-managed-environment This environment is external…...
lvm知识终结
、什么是 LVM LVM 是 Linux 下对磁盘分区进行管理的一种工具,适合管理大存储设备,并允许用户动态调整文件系统的大小 lvm 常用的命令 功能 PV 管理命令 VG 管理命令 LV 管理命令 scan 扫描 pvscan vgscan lvscan create 创建 pvcreate v…...
ESP32S3 IDF 对 16路输入输出芯片MCP23017做了个简单的测试
这次还是使用了idf老版本4.4.7,上次用了5.3,感觉不好用,官方的MCP23017芯片是英文版,真的很难读明白,可能是我英语水平不够吧。先看看每个寄存器的功能: IODIRA 和 IODIRB: 输入/输出方向寄存器 IPOLA 和 I…...
【技术前沿】Flux.1部署教程入门--Stable Diffusion团队最前沿、免费的开源AI图像生成器
项目简介 FLUX.1 是一种新的开源图像生成模型。它由 Stable Diffusion 背后的团队 Black Forest Labs 开发。 官网中有以下功能开源供大家参考: FLUX.1 擅长在图像中准确再现文字,因此非常适合需要清晰文字或短语的设计。无论是标牌、书籍封面还是品牌…...
Redis 的 STREAM 和 RocketMQ 是两种不同的消息队列和流处理解决方案,它们在设计理念、功能和用途上有显著区别。以下是它们的主要区别:
20240813 Redis 的 STREAM 和 RocketMQ 是两种不同的消息队列和流处理解决方案,它们在设计理念、功能和用途上有显著区别。以下是它们的主要区别:1. 使用 Redis 的 Sorted Set 数据结构连接到 Redis示例用法添加事件获取滑动窗口内的事件移除过期事件连接…...
Visual Studio Code安装与C/C++语言运行(上)
Visual Studio Code(VS Code)作为微软开发的一款轻量级但功能强大的源代码编辑器,广泛应用于各种编程语言的开发,包括C/C。以下将详细介绍VS Code的安装过程以及与C/C语言运行环境的配置。 一、Visual Studio Code的安装 1. 准备…...
探索数据可视化,数据看板在各行业中的应用
数据可视化是一种通过图形化手段将数据呈现出来的技术,它将复杂的数据和信息转化为易于理解的图表、地图、仪表盘等视觉元素,使得数据的模式、趋势和关系更加直观地展现出来。通过数据可视化,用户可以快速识别重要信息、发现潜在问题…...
haralyzer 半自动,一次性少量数据采集快捷方法
使用场景:半自动,一次性少量数据采集需求在工作中还是不少遇到的,无论使用模拟的方式,或者破解都不太划算。其实这种需求,使用半自动爬虫是最简单的。不需要考虑网站反爬虫的问题,因为你使用的就是真实的浏…...
mall-admin-web-master前端项目下载依赖失败解决
碰壁后的总结 pythone 环境 2.XX版本,切记不要3.0以上的。node 16.x不能太高 错误案例 npm ERR! code 1 npm ERR! path D:\workspace\springBootMall\mall-admin-web-master\node_modules\node-sass npm ERR! command failed npm ERR! command C:\windows\system…...
【07】JVM是怎么实现invokedynamic的
在Java中,方法调用会被编译为invokeStatic,invokeSpecial,invokVirtual以及invokeInterface四种指令。这些指令与包含目标方法类名、方法名以及方法描述符的符号引用捆绑,在实际运行之前,JVM根据这个符号引用链接到具体…...
使用API有效率地管理Dynadot域名,查看参与的拍卖列表
前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…...
Linux 基本指令讲解
linux 基本指令 clear 清屏 Alt Enter 全屏/退出全屏 pwd 显示当前用户所处路径 cd 改变目录 cd /root/mikecd … 返回上级目录cd - 返回最近所处的路径cd ~ 直接返回当前用户自己的家目 roor 中:/root普通用户中:/home/mike mkdir 创建一个文件夹(d) …...
PRE_EMPHASIS
PRE_EMPASIS属性用于提高高频信号的信号完整性 其通过传输线遭受高频损耗。发射机 预加重(pre_EMPASIS)功能允许对某些信号驱动器进行预加重 I/O标准。 提示:发射机的预加重可以与接收机的均衡相结合,以提高 整体信号完整性。 理想…...
【QT常用技术讲解】多线程处理+全局变量处理异步事件并获取多个线程返回的结果
前言 QTableView加入勾选项后(参考【QT常用技术讲解】QTableView添加QCheckBox、QPushButton),如果支持右键菜单功能,此时就有统一执行多个异步事件,并且统一输出到界面的需求了,本篇结合多线程共享全局变量…...
数组列表中的最大距离
给定 m 个数组,每个数组都已经按照升序排好序了。现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。两个整数 a 和 b 之间的距离定义为它们差的绝对值 |a-b| 。你的任务就是去找到最大距离 示例 1:…...
C语言新手小白详细教程(7)指针和指针变量
希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明1、指针的定义接下来我们用图示的形式来解释一下 指针:2、申明指针变量3、取地址符 &4、为指针…...
Kafka保证消息不丢失
Kafka保证消息不丢失 生产者发送消息到Broker丢失 设置异步发送 回调方法中的参数Exception e如果为空 代表发送成功,如果不为空代表发送失败出现异常 消息在Broker中丢失 kafka集群中存在分区机制 分区中分为leader和follower副本 leader负责读写,而follower只负责数据…...
数据结构+基数排序算法
一、问题描述 实现英文单词按字典序排列的基数排序算法 编写一个程序,采用基数排序方法将一组英文单词按字典顺序排 列。假设单词均由小写字母或空格构成,最长的单词有 MaxLen 个 字母,用相关数据进行测试并输出各趟的排序结果。 用例&#…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
