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

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...