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 个 字母,用相关数据进行测试并输出各趟的排序结果。 用例&#…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...