当前位置: 首页 > news >正文

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 - Typeapplication/json,告诉服务器发送的数据是 JSON 格式的。

四、拦截器

  1. 响应拦截器的基本概念

    • 响应拦截器是 Axios 提供的一个强大功能,用于在服务器响应到达客户端(浏览器或 Node.js 应用)后对响应进行统一处理。它允许你在每个请求返回数据时执行一些通用的操作,而不是在每个请求的then方法中重复相同的代码。
    • 其核心是axios.interceptors.response.use方法,这个方法接受两个函数作为参数,分别用于处理成功的响应和失败的响应。
  2. 成功响应的处理

    • 示例

javascript

axios.interceptors.response.use((response) => {// 对响应数据做点什么console.log('响应成功,状态码:', response.status);return response;
}, (error) => {// 处理错误响应的代码
});

  • 解释:当服务器返回的响应状态码在2xx范围内(通常表示成功)时,会调用第一个函数。在这个函数中,你可以对response对象进行各种操作。例如,你可以打印响应的状态码(如response.status),也可以对response.data(服务器返回的数据)进行格式转换、数据过滤等操作。最后,一定要返回response对象,这样后续的then方法(如果有的话)才能正常获取到完整的响应。

  1. 错误响应的处理
    • 示例

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时,可能表示资源未找到,你可以在控制台打印相关提示。最后,需要返回一个被拒绝的PromisePromise.reject(error))来传递错误信息,这样如果在请求链中有后续的catch方法,就可以捕获到这个错误。

  1. 多个响应拦截器的使用
    • 可以添加多个响应拦截器,它们会按照添加的顺序依次执行。例如:

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请求的基本用法

  1. 基本 POST 请求格式
    • 首先需要引入 Axios,在组件中可以使用import axios from 'axios';引入。
    • 基本的 POST 请求示例如下:

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块会捕获错误并打印错误信息。

  1. 发送 JSON 数据的 POST 请求
    • 当需要发送 JSON 格式的数据时,需要设置请求头中的Content - Typeapplication/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为横坐标&#xff0c;y为纵坐标 int s, f;//s为步数&#xff0c;//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 在包管理与模块化中的优势:与其他开发语言的比较

在开发复杂的、规模庞大的软件系统时&#xff0c;包管理和模块化设计起着至关重要的作用。它们不仅决定了代码的组织和可维护性&#xff0c;还直接影响到团队协作效率、扩展性和性能。在众多编程语言中&#xff0c;Java 凭借其成熟的生态系统、强类型系统和标准化的包管理机制&…...

LLMs(大型语言模型)的多智能体:Auto-GPT

LLMs(大型语言模型)的多智能体:Auto-GPT 是指在一个系统中集成多个具有不同能力、角色和任务的智能体,这些智能体能够相互协作、沟通和交互,以共同完成复杂的任务或解决复杂的问题。每个智能体都可以被视为一个独立的实体,具有自己的策略、目标和知识库,通过相互之间的…...

CPU狂飙900%如何分析?怎么定位?怎么溯源处理

当你的服务器CPU飙升到900%&#xff0c;系统卡顿、响应迟缓、业务受阻&#xff0c;这种令人焦虑的场景是否让你束手无策&#xff1f;别慌&#xff0c;这并不是世界末日&#xff0c;只要掌握正确的分析与定位方法&#xff0c;就能快速找到问题根源&#xff0c;并有效解决。 CPU…...

Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)

本文讲如何计算倒计时&#xff0c;并添加该倒计时的数据条。 1&#xff0c;如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格&#xff0c;选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…...

Java中的阻塞队列--以LinkedBlockingQueue为例

顾名思义&#xff0c;就是一种在对队列进行出队或者入队操作的时候会阻塞的队列。下面使用JDK17中的LinkedBlockingQuece进行简单的介绍。 LinkedBlockingQueue基本结构 LinkedBlockingQueue的主要结构以及构成的数据结构如下图所示。具体来说包括 存储元素的链表&#xff0…...

16.5万煤气柜柜位计故障分析

一、事故经过&#xff1a; 2015年8月1&#xff14;日20点45分&#xff0c;16.5万立煤气柜柜顶油封溢流口有大量油液溢出&#xff0c;此时雷达柜位计在计算机上示值为63.79米&#xff0c;由于接近傍晚天色较暗&#xff0c;岗位操作员并未及时发现这一异常状况。22点45分左右&…...

高效沟通驱动LabVIEW项目成功

在LabVIEW项目开发中&#xff0c;由于涉及软件、硬件及多方协作&#xff0c;项目沟通效率的高低直接影响开发进度与最终质量。不明确的需求、信息传递中的误解以及跨部门协作的阻碍&#xff0c;常导致项目延误甚至失败。因此&#xff0c;建立高效的沟通机制&#xff0c;确保信息…...

大模型之三十三- 开源Melo 语音合成

大模型之三十三- 开源Melo 语音合成 文本到语音(TTS)系统从基于基础音素的模型演变成复杂的端到端神经方法,这种方法可以直接将文本转换为语音。这一变革得益于深度学习的进步和计算能力的提升,已经在语音的自然度、韵律控制和跨语言能力方面取得了重大进展 。现代TTS系统…...

论文复现:四轮转向车辆后轮转角控制方法研究

写在前面&#xff0c;主要参考以下这篇文章&#xff0c;并复现了其中几种后轮转角控制方法。 一、什么是四轮转向 顾名思义&#xff0c;四轮转向指的是四个轮子都能转向&#xff0c;都能转动。当驾驶员操作方向盘进行前轮转向时&#xff0c;后轮按照特定算法给出的转角跟着转动…...

【UFEN】基于多层特征融合和多任务学习的多模态情感分析

abstract 当前多模态情感分析面临的主要挑战包括&#xff1a;1、模型如何在单一模态中提取情感信息&#xff0c;并实现多模态信息的互补传输&#xff1b;2、在单一模态中体现的情绪与多模态标签不一致的情况下&#xff0c;如何输出相对稳定的预测&#xff1b;3、当单模态信息不…...

uniapp的插件开发发布指南

Hbuilder创建项目 项目根目录创建uni_modules 开发组件 发布到插件市场 填写发布说明&#xff08;未登录需要登录&#xff09; 点击提交 在终端可以看到 发布成功&#xff01; 插件市场查看...

【Linux系统】—— 编译器 gcc/g++ 的使用

【Linux系统】—— 编译器 gcc/g 的使用 1 用 gcc 直接编译2 翻译环境2.1 预处理&#xff08;进行宏替换&#xff09;2.2 编译&#xff08;生成汇编&#xff09;2.3 汇编&#xff08;生成机器可识别代码&#xff09;2.4 链接2.5 记忆小技巧2.6 编译方式2.7 几个问题2.7.1 如何理…...

[微服务]注册中心优化

环境隔离 企业实际开发中&#xff0c;往往会搭建多个运行环境&#xff0c;例如&#xff1a; 开发环境测试环境预发布环境生产环境 这些不同环境之间的服务和数据之间需要隔离。 还有的企业中&#xff0c;会开发多个项目&#xff0c;共享nacos集群。此时&#xff0c;这些项目…...

C++ ——— 模拟实现 vector 类

目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…...

大华相机DH-IPC-HFW3237M支持的ONVIF协议

使用libONVIF C库。 先发现相机。 配置 lib目录 包含 编译提示缺的文件&#xff0c;到libonvif里面拷贝过来。 改UDP端口 代码 使用msvc 2022的向导生成空项目&#xff0c;从项目的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…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...