axios的使用总结
一、Axios 简介
Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在 Vue 项目中,它主要用于发送 HTTP 请求来获取数据(如从 API 获取数据)或者提交数据(如用户登录、注册等表单数据)。
二、安装 Axios
- 在 Vue 项目中,可以通过 npm 或者 yarn 来安装 Axios。
- 使用 npm 安装:
npm install axios。 - 使用 yarn 安装:
yarn add axios。
三、基本使用方法
1. 引入 Axios
- 在需要使用 Axios 的 Vue 组件中,可以通过以下方式引入:
- 如果是在一个较大的项目中,也可以在
main.js(Vue 项目的入口文件)中全局引入 Axios,这样所有的组件都可以直接使用它。例如:
javascript
import axios from 'axios';
Vue.prototype.$axios = axios;
然后在组件中就可以通过this.$axios来访问 Axios。
2. 发送 GET 请求
基本的 GET 请求示例:
javascript
axios.get('https://api.example.com/data').then((response) => {console.log(response.data);}).catch((error) => {console.error(error);});
- 上述代码向
https://api.example.com/data发送一个 GET 请求。如果请求成功,服务器返回的数据可以通过response.data获取;如果出现错误(如网络问题或者服务器返回错误状态码),错误信息会被catch块捕获。 - 带参数的 GET 请求:
- javascript
axios.get('https://api.example.com/data', {params: {id: 1,name: 'John'}
}).then((response) => {console.log(response.data);}).catch((error) => {console.error(error);});
这里通过params对象传递查询参数,Axios 会自动将这些参数拼接在 URL 后面,例如请求的 URL 可能会变成https://api.example.com/data?id=1&name=John。
3. 发送 POST 请求
- 基本的 POST 请求示例:
javascript
axios.post('https://api.example.com/data', {key: 'value'
}).then((response) => {console.log(response);}).catch((error) => {console.error(error);});
- 上述代码向
https://api.example.com/data发送一个 POST 请求,并且携带了一个数据对象{key: 'value'}。这个数据对象通常是要提交给服务器的数据,比如表单数据。 - 发送 JSON 数据的 POST 请求:
- javascript
const data = {username: 'user1',password: '123456'
};
axios.post('https://api.example.com/login', data, {headers: {'Content - Type': 'application/json'}
}).then((response) => {console.log(response);}).catch((error) => {console.error(error);});
这里通过设置headers中的Content - Type为application/json,告诉服务器发送的数据是 JSON 格式的。
四、拦截器
-
响应拦截器的基本概念
- 响应拦截器是 Axios 提供的一个强大功能,用于在服务器响应到达客户端(浏览器或 Node.js 应用)后对响应进行统一处理。它允许你在每个请求返回数据时执行一些通用的操作,而不是在每个请求的
then方法中重复相同的代码。 - 其核心是
axios.interceptors.response.use方法,这个方法接受两个函数作为参数,分别用于处理成功的响应和失败的响应。
- 响应拦截器是 Axios 提供的一个强大功能,用于在服务器响应到达客户端(浏览器或 Node.js 应用)后对响应进行统一处理。它允许你在每个请求返回数据时执行一些通用的操作,而不是在每个请求的
-
成功响应的处理
- 示例
javascript
axios.interceptors.response.use((response) => {// 对响应数据做点什么console.log('响应成功,状态码:', response.status);return response;
}, (error) => {// 处理错误响应的代码
});
- 解释:当服务器返回的响应状态码在
2xx范围内(通常表示成功)时,会调用第一个函数。在这个函数中,你可以对response对象进行各种操作。例如,你可以打印响应的状态码(如response.status),也可以对response.data(服务器返回的数据)进行格式转换、数据过滤等操作。最后,一定要返回response对象,这样后续的then方法(如果有的话)才能正常获取到完整的响应。
- 错误响应的处理
- 示例
javascript
axios.interceptors.response.use((response) => {return response;
}, (error) => {console.log('响应出错,状态码:', error.response.status);if (error.response.status === 401) {// 例如,当返回401状态码(未授权)时,跳转到登录页面router.push('/login');} else if (error.response.status === 404) {console.log('资源未找到');}return Promise.reject(error);
});
- 解释:当服务器返回的响应状态码不在
2xx范围内(通常表示出错)时,会调用第二个函数来处理错误。error对象包含了详细的错误信息,其中error.response是一个包含响应数据的对象,包括状态码(error.response.status)、响应头(error.response.headers)和服务器返回的数据(error.response.data)等。 - 可以根据不同的状态码进行不同的操作。如当状态码为
401时,可能表示用户未授权,这时可以通过router.push跳转到登录页面。当状态码为404时,可能表示资源未找到,你可以在控制台打印相关提示。最后,需要返回一个被拒绝的Promise(Promise.reject(error))来传递错误信息,这样如果在请求链中有后续的catch方法,就可以捕获到这个错误。
- 多个响应拦截器的使用
- 可以添加多个响应拦截器,它们会按照添加的顺序依次执行。例如:
javascript
axios.interceptors.response.use((response) => {// 第一个拦截器对响应数据进行初步处理console.log('第一个拦截器:响应成功,状态码:', response.status);return response;
});
axios.interceptors.response.use((response) => {// 第二个拦截器对响应数据进行进一步处理console.log('第二个拦截器:响应成功,状态码:', response.status);return response;
});
- 解释:在这个例子中,当请求成功返回时,首先会执行第一个响应拦截器中的代码,然后再执行第二个响应拦截器中的代码。这种方式可以让你对响应进行分层处理,比如第一个拦截器用于数据格式的初步检查,第二个拦截器用于数据的深度处理。不过需要注意的是,如果在前面的拦截器中返回了一个新的
Promise或者修改了response对象,会影响后面拦截器接收到的参数。
除了响应拦截器,Axios还有哪些常用的拦截器?
如何在Axios中取消一个正在进行的请求?
详细介绍一下Axios的并发请求是如何实现的?
1. 请求拦截器
- 请求拦截器可以在请求发送之前对请求进行一些操作,比如添加认证信息、修改请求头、显示加载动画等。
- javascript
axios.interceptors.request.use((config) => {// 在发送请求之前做些什么,例如添加token到请求头const token = localStorage.getItem('token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;
}, (error) => {// 对请求错误做些什么return Promise.reject(error);
});
- 在上述代码中,
axios.interceptors.request.use方法用于添加请求拦截器。它接收两个函数作为参数,第一个函数用于处理请求配置(config),第二个函数用于处理请求错误。
2. 响应拦截器
响应拦截器可以在接收到服务器响应后对响应进行处理,比如检查响应状态码、处理错误信息、隐藏加载动画等。
javascript
axios.interceptors.response.use((response) => {// 对响应数据做点什么return response;
}, (error) => {// 对响应错误做点什么if (error.response.status === 401) {// 例如,当返回401状态码(未授权)时,跳转到登录页面router.push('/login');}return Promise.reject(error);
});
- 同样,
axios.interceptors.response.use方法用于添加响应拦截器,它也接收两个函数,分别用于处理正常响应和响应错误。
五、并发请求
- Axios 可以同时发送多个请求,使用
axios.all方法。例如:
javascript
const request1 = axios.get('https://api.example.com/data1');
const request2 = axios.get('https://api.example.com/data2');
axios.all([request1, request2]).then(axios.spread((response1, response2) => {console.log(response1.data);console.log(response2.data);})).catch((error) => {console.error(error);});
- 上述代码同时发送了两个 GET 请求,当所有请求都成功返回后,
axios.spread函数会将各个请求的响应作为参数传递给回调函数,这样就可以分别处理每个响应的数据。
六、取消请求
有时候需要取消正在进行的请求,Axios 提供了一种方法来实现。首先,需要通过CancelToken来创建一个取消令牌。
javascript
const source = axios.CancelToken.source();
axios.get('https://api.example.com/data', {cancelToken: source.token
}).then((response) => {console.log(response.data);}).catch((thrown) => {if (axios.isCancel(thrown)) {console.log('Request canceled', thrown.message);} else {console.error(thrown);}});
// 取消请求
source.cancel('Operation canceled by the user');
- 在上述代码中,
axios.CancelToken.source()创建了一个取消令牌的源,通过将cancelToken属性添加到请求配置中,可以将这个令牌与请求关联起来。当调用source.cancel方法时,就可以取消对应的请求。并且在catch块中,可以通过axios.isCancel函数来判断是否是因为取消请求而导致的错误。
总结一下Axios的post请求的基本用法
- 基本 POST 请求格式
- 首先需要引入 Axios,在组件中可以使用
import axios from 'axios';引入。 - 基本的 POST 请求示例如下:
- 首先需要引入 Axios,在组件中可以使用
javascript
axios.post('https://api.example.com/data', {key: 'value'
}).then((response) => {console.log(response);}).catch((error) => {console.error(error);});
- 这里
axios.post方法接收两个主要参数。第一个参数是请求的 URL(如https://api.example.com/data),第二个参数是要发送的数据(如{key: 'value'}),这个数据通常是要提交给服务器的数据,比如表单数据。当请求成功时,在then块中可以通过response对象获取服务器返回的信息;如果请求出错,catch块会捕获错误并打印错误信息。
- 发送 JSON 数据的 POST 请求
- 当需要发送 JSON 格式的数据时,需要设置请求头中的
Content - Type为application/json。示例如下:
- 当需要发送 JSON 格式的数据时,需要设置请求头中的
javascript
const data = {username: 'user1',password: '123456'
};
axios.post('https://api.example.com/login', data, {headers: {'Content - Type': 'application/json'}
}).then((response) => {console.log(response);}).catch((error) => {console.error(error);});
- 首先定义了要发送的 JSON 数据对象(如
data),然后在axios.post方法的第三个参数中设置headers。通过将Content - Type设置为application/json,告诉服务器发送的数据是 JSON 格式的。同样,请求成功后在then块处理返回信息,出错则在catch块捕获错误。
相关文章:
axios的使用总结
一、Axios 简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在 Vue 项目中,它主要用于发送 HTTP 请求来获取数据(如从 API 获取数据)或者提交数据(如用户登录、注册等表单数据)。 二…...
革新未来:高效智能数字人技术引领多元化应用
随着科技的不断进步,数字人技术已逐渐成为企业数字化转型中的重要工具。数字人不仅能够优化客户体验,还可以显著提升企业运营效率。本文将详细介绍一种高性能、高质量、低延迟、快速响应以及安全稳定的数字人技术方案,帮助企业在多元化场景中…...
使用批处理文件清除系统垃圾
第一步:打开记事本,里面的命令如下 echo off echo 正在清理临时文件,请稍候...:: 清理系统临时文件 echo 清理系统临时文件... del /q /f /s "%TEMP%\*.*" del /q /f /s "%WINDIR%\Temp\*.*" rd /s /q "%WINDIR%\T…...
总结5..
#include<stdio.h> struct nb {//结构体列队 int x, y;//x为横坐标,y为纵坐标 int s, f;//s为步数,//f为方向 }link[850100]; int n, m, x, y, p, q, f; int hard 1, tail 1; int a[52][52], b[52][52], book[52][52][91]; int main() { …...
Java 在包管理与模块化中的优势:与其他开发语言的比较
在开发复杂的、规模庞大的软件系统时,包管理和模块化设计起着至关重要的作用。它们不仅决定了代码的组织和可维护性,还直接影响到团队协作效率、扩展性和性能。在众多编程语言中,Java 凭借其成熟的生态系统、强类型系统和标准化的包管理机制&…...
LLMs(大型语言模型)的多智能体:Auto-GPT
LLMs(大型语言模型)的多智能体:Auto-GPT 是指在一个系统中集成多个具有不同能力、角色和任务的智能体,这些智能体能够相互协作、沟通和交互,以共同完成复杂的任务或解决复杂的问题。每个智能体都可以被视为一个独立的实体,具有自己的策略、目标和知识库,通过相互之间的…...
CPU狂飙900%如何分析?怎么定位?怎么溯源处理
当你的服务器CPU飙升到900%,系统卡顿、响应迟缓、业务受阻,这种令人焦虑的场景是否让你束手无策?别慌,这并不是世界末日,只要掌握正确的分析与定位方法,就能快速找到问题根源,并有效解决。 CPU…...
Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)
本文讲如何计算倒计时,并添加该倒计时的数据条。 1,如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格,选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…...
Java中的阻塞队列--以LinkedBlockingQueue为例
顾名思义,就是一种在对队列进行出队或者入队操作的时候会阻塞的队列。下面使用JDK17中的LinkedBlockingQuece进行简单的介绍。 LinkedBlockingQueue基本结构 LinkedBlockingQueue的主要结构以及构成的数据结构如下图所示。具体来说包括 存储元素的链表࿰…...
16.5万煤气柜柜位计故障分析
一、事故经过: 2015年8月14日20点45分,16.5万立煤气柜柜顶油封溢流口有大量油液溢出,此时雷达柜位计在计算机上示值为63.79米,由于接近傍晚天色较暗,岗位操作员并未及时发现这一异常状况。22点45分左右&…...
高效沟通驱动LabVIEW项目成功
在LabVIEW项目开发中,由于涉及软件、硬件及多方协作,项目沟通效率的高低直接影响开发进度与最终质量。不明确的需求、信息传递中的误解以及跨部门协作的阻碍,常导致项目延误甚至失败。因此,建立高效的沟通机制,确保信息…...
大模型之三十三- 开源Melo 语音合成
大模型之三十三- 开源Melo 语音合成 文本到语音(TTS)系统从基于基础音素的模型演变成复杂的端到端神经方法,这种方法可以直接将文本转换为语音。这一变革得益于深度学习的进步和计算能力的提升,已经在语音的自然度、韵律控制和跨语言能力方面取得了重大进展 。现代TTS系统…...
论文复现:四轮转向车辆后轮转角控制方法研究
写在前面,主要参考以下这篇文章,并复现了其中几种后轮转角控制方法。 一、什么是四轮转向 顾名思义,四轮转向指的是四个轮子都能转向,都能转动。当驾驶员操作方向盘进行前轮转向时,后轮按照特定算法给出的转角跟着转动…...
【UFEN】基于多层特征融合和多任务学习的多模态情感分析
abstract 当前多模态情感分析面临的主要挑战包括:1、模型如何在单一模态中提取情感信息,并实现多模态信息的互补传输;2、在单一模态中体现的情绪与多模态标签不一致的情况下,如何输出相对稳定的预测;3、当单模态信息不…...
uniapp的插件开发发布指南
Hbuilder创建项目 项目根目录创建uni_modules 开发组件 发布到插件市场 填写发布说明(未登录需要登录) 点击提交 在终端可以看到 发布成功! 插件市场查看...
【Linux系统】—— 编译器 gcc/g++ 的使用
【Linux系统】—— 编译器 gcc/g 的使用 1 用 gcc 直接编译2 翻译环境2.1 预处理(进行宏替换)2.2 编译(生成汇编)2.3 汇编(生成机器可识别代码)2.4 链接2.5 记忆小技巧2.6 编译方式2.7 几个问题2.7.1 如何理…...
[微服务]注册中心优化
环境隔离 企业实际开发中,往往会搭建多个运行环境,例如: 开发环境测试环境预发布环境生产环境 这些不同环境之间的服务和数据之间需要隔离。 还有的企业中,会开发多个项目,共享nacos集群。此时,这些项目…...
C++ ——— 模拟实现 vector 类
目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…...
大华相机DH-IPC-HFW3237M支持的ONVIF协议
使用libONVIF C库。 先发现相机。 配置 lib目录 包含 编译提示缺的文件,到libonvif里面拷贝过来。 改UDP端口 代码 使用msvc 2022的向导生成空项目,从项目的main示例拷贝过来。 CameraOnvif.h #pragma once#include <QObject> #include &l…...
【Java】常用工具类方法:树形结构、获取IP、对象拷贝、File相关、雪花算法等
1、生成子孙树 /*** 生成子孙树** param dataArray 遍历所有数据, 每个数据加到其父节点下* return 子孙树json*/public static JSONArray makeTree(JSONArray dataArray) {List<Map<String, Object>> data new ArrayList<>();for (int i 0; i < dataAr…...
物理引导的机器学习工作流:气候建模的融合创新与实践
1. 项目概述:当气候建模遇见机器学习如果你像我一样,在气候模拟这个领域摸爬滚打超过十年,就会深刻体会到一种“甜蜜的负担”:我们构建的地球系统模型(ESM)越来越精细,物理过程越来越复杂&#…...
App Inventor蓝牙调试避坑指南:从连接失败到数据乱码,一次讲清所有常见问题
App Inventor蓝牙调试避坑指南:从连接失败到数据乱码的实战解决方案在移动应用开发领域,蓝牙通信一直是实现设备间短距离数据交换的核心技术之一。对于使用App Inventor的开发者而言,蓝牙模块提供了无需复杂编码即可实现无线通信的便捷途径。…...
利用DiSEqC协议与AVR单片机驱动卫星天线电机改造户外设备
1. 项目概述:用卫星天线电机驱动一切如果你手头有一些需要承受风吹日晒、还得精确转动的设备,比如一个户外的大型定向天线,或者一个需要定期调整角度的太阳能板支架,甚至是一个坚固的监控云台,你可能会为驱动机构发愁。…...
Sangfor文件夹可以删除吗?【图文讲解】深信服文件夹残留清理?如何彻底删除深信服?Sangfor文件夹是什么?
(1)问题背景打开C盘,突然冒出个Sangfor 文件夹,占用好几个 GB 空间,想删又不敢删,怕删坏系统、断网崩溃;上网一查,说法五花八门,有人说是病毒,有人说是办公软…...
告别数据饥荒:用PyTorch手把手实现原型网络(Prototypical Networks)做电影评论情感分类
告别数据饥荒:用PyTorch手把手实现原型网络做电影评论情感分类 在自然语言处理领域,情感分析一直是热门研究方向,但现实中的开发者常面临一个尴尬困境:标注数据太少。传统深度学习方法动辄需要成千上万的标注样本,而实…...
AI圈内火热的Agent、MCP、Skill、CLI是啥?用装修房子讲透,看完秒懂
本文用装修房子的比喻,详细解释了AI领域的四个核心概念:Agent如同会自主规划任务的私人助理;MCP是AI与外部工具数据的统一接口,类似USB-C;Skill是指导AI按标准操作执行的手册;CLI则是不依赖图形界面的命令行…...
TorchDynamo与TorchInductor:PyTorch编译器生态的完整解析
TorchDynamo与TorchInductor:PyTorch编译器生态的完整解析 【免费下载链接】torchdynamo A Python-level JIT compiler designed to make unmodified PyTorch programs faster. 项目地址: https://gitcode.com/gh_mirrors/to/torchdynamo TorchDynamo 是一个…...
告别手动复制!用这个自定义编辑器脚本一键备份/克隆Unity Terrain Data
告别手动复制!用这个自定义编辑器脚本一键备份/克隆Unity Terrain Data在Unity关卡设计和技术美术的工作流中,地形数据的灵活复用往往意味着反复的手动操作——导出高度图、备份材质参数、复制植被分布,每个环节都可能成为效率瓶颈。想象这样…...
API渗透测试:契约驱动的协议/语义/架构三层攻防
1. 为什么“API渗透测试”不是Web渗透的简单延伸?很多人刚接触API安全时,第一反应是:“不就是把Burp Suite抓到的HTTP请求换个参数发一发?跟测网页表单差不多。”我2018年第一次接手某金融类SaaS平台的API安全评估时,也…...
从《吃豆人》到开放世界:聊聊Unity Navigation里Agent Radius和Cost的那些‘潜规则’
从《吃豆人》到开放世界:Unity Navigation中Agent Radius与Cost的隐藏逻辑1980年诞生的《吃豆人》用简单的迷宫路径定义了早期游戏AI的移动规则——幽灵们沿着固定路线巡逻,遇到转角时随机选择方向。这种设计在当时堪称革命性,但以今天的标准…...
