一篇文章熟练掌握 Axios

Axios是什么

Axios是一个基于Promise的网络请求库,作用于node.js和浏览器中。在服务端使用原生node.js http模块,在客户端使用XMLHttpRequest。是基于Promise对Ajax的封装。

Axios的特性

  • 从浏览器创建XMLHttpRequests
  • 从node.js创建http请求
  • 支持Promise API
  • 拦截请求和相应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持抵御XSRF

安装

npm i axios
yarn add axios

Axios基本使用

使用前记得导入axios
发送GET请求:

axios.get('/user?id=1234').then(res => {console.log(res)}).catch(error => {console.log(error)}).then(() => {//总会执行})

注意传递参数的方式,路径后加’?'后拼接参数。还可以用另一种方式传递参数:

axios.get('/user',{params: {id: 1234}
}).then(res => {console.log(res)}).catch(error => {console.log(error)}).then(() => {//总会执行})

不在地址后面进行拼接,axios.get()这个方法第一个参数是要请求的路径,第二个参数是一个对象,可以在这个对象中加一些配置,参数就写在这里的params里面。也可以使用async/await:

async function getUser(){try{const res = await axios.get('/user?id=1234')console.log(res)}catch (error){console.error(error)}
}

注意要用一个函数包裹起来并在前面加上async,注意要使用try-catch捕获错误,注意await的位置。

POST请求/多请求

发送一个POST请求:

axios.post('/user',{firstname: 'qiling',lastname: 'wuxie'
}).then(res => {console.log(res)
}).catch(error => {console.log(error)
})

axios.post() 方法的第一个参数是请求的地址,第二个参数是一个对象,是要post的数据。
如果发起多个请求可以使用Promise.all。这个方法可以处理多个Promise:

function getUserAccount() {return axios.get('/user/12345');
}function getUserPermissions() {return axios.get('/user/12345/permissions');
}Promise.all([getUserAccount(), getUserPermissions()]).then(function (results) {const acct = results[0];const perm = results[1];});

注意Promise.all()接收的参数是一个Promise对象数组,后面.then接收到的结果也是一个数组,是一个由上面的Promise对象数组返回的结果构成的数组。

Axios实例

使用自定义配置新建一个实例:

const instance = axios.create({baseURL: 'http://some-domain.com/api/',timeout: 1000,headers: {'X-Custom-Header': 'foobar'}
})

axios.get()等方法都是实例方法。

请求配置

以下是创建请求时可以使用的配置。只有url是必须的。不指定method,请求就默认是GET

  • url 请求的服务器的url
  • method 创建请求时使用的方法
  • baseURL 自动加在url前面
  • transformRequest: [function(data, header) { return data }]发请求前修改请求数据,只能用于post,put,patch
  • transformResponse: [function (data) { return data }] 传递给 .then/catch之前修改相应数据
  • headers: {‘X-Requested-With’: ‘XMLHttpRequest’} 自定义请求头
  • params: { id: 12345 } 设置与请求一起发送的URL参数,必须是简单对象
  • data: { firstname: ‘qiling’ } 作为请求体被发送的数据
  • timeout 指定请求超时的毫秒数
  • proxy 定义代理服务器的主机名,端口,协议
  • validatestatus: function (status) { return status >= 200 && status < 300; // 默认值 } 如果返回true就resolved,否则就是rejected
  • cancelToken: new CancelToken(function (cancel) { }) 使用cancel token取消请求,cancel token由CancelToken.source()创建

响应结构

一个请求的响应包含以下信息:

{//服务器提供的响应data: {},//来自服务器响应的HTTP状态码status: 200,//来自服务器响应的状态信息statusText: 'OK',//服务器响应头headers: {},//axios请求的配置信息config: {},//生成此响应的请求,在浏览器中是XMLHttpRequest实例request: {}
}

使用.then 时将获得以下相应:

axios.get('/user/12345').then(function (response) {console.log(response.data);console.log(response.status);console.log(response.statusText);console.log(response.headers);console.log(response.config);});

数据,状态码,状态信息,响应头,请求的配置信息,生成此响应的请求。如果使用catch,相应可通过error对象被使用。

拦截器

在请求或响应在被then和catch处理之前拦截它们
添加请求拦截器:

axios.interceptors.request.use(function (config) {//在发送请求之前做什么return config
},function (error){//对请求错误做些什么return Promise.reject(error)
})

添加响应拦截器:

axios.interceptors.request.use(function (response){//2xx范围内的状态玛都会触发这个函数//对相应数据做些什么return response
}, function (error) {//超出2xx范围的状态码都会触发这个函数//对相应错误做些什么return return Promise.reject(error)
})

移除拦截器:

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

自己定义的axios实例也可以添加拦截器:

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

错误处理

axios.get('/user/12345').catch(function (error) {if(error.response) {//请求成功且得到响应,但是状态码不是2xx....} else if(error.request){//请求成功,没得到响应//`error.request` 在浏览器中是 XMLHttpRequest 的实例....}else {//请求的发送出问题了console.log(error.message)}})

默认是超出2xx范围就错误,但是使用使用 validateStatus 配置选项,可以自定义抛出错误的 HTTP code。

axios.get('/api',{//注意要把status作为参数传进去validateStatus: function (status) {return status < 500}
})

可以对error对象进行toJSON获取更多错误信息:

axios.get('/user/12345').catch(function (error) {console.log(error.toJSON());});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于OpenCV的人脸识别系统案例

基于OpenCV的人脸识别系统案例 人脸识别简介代码实现案例应用情况 下面将介绍如何使用Python和OpenCV库构建一个简单但强大的人脸识别系统。人脸识别是计算机视觉领域的一个重要应用&#xff0c;具有广泛的实际用途&#xff0c;从安全门禁到娱乐应用。 人脸识别简介 人脸识别是…

MySQL - 表达式With as 语句的使用及练习

目录 8.1 WITH AS 的含义 8.2 WITH AS语法的基本结构如下&#xff1a; 8.3 练习题1 8.4 牛客练习题 8.1 WITH AS 的含义 WITH AS 语法是MySQL中的一种临时结果集&#xff0c;它可以在SELECT、INSERT、UPDATE或DELETE语句中使用。通过使用WITH AS语句&#xff0c;可以将一个查…

量子芯片技术:未来的计算革命

量子芯片技术&#xff1a;未来的计算革命 一、引言 随着科技的不断发展&#xff0c;人类正在进入一个全新的技术时代&#xff0c;即量子时代。量子芯片技术作为这个时代的重要代表&#xff0c;正逐渐改变我们对计算和信息处理的理解。本文将深入探讨量子芯片技术的基本原理、…

Navicat 技术指引 | 适用于 GaussDB 分布式的服务器对象的创建/设计

Navicat Premium&#xff08;16.3.3 Windows版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构…

Java入门 EditPlus的安装与配置讲解

写Java程序不建议使用EditPlus&#xff0c;首选idea社区版&#xff0c;其次是vscode&#xff0c; 然后是eclipse 。editplus说实话排不上号。 但既然小伙伴想了解一下怎么配置&#xff0c;这里就简单说一下。 下载 首先是jdk&#xff0c;jdk是Java开发和运行的基础&#xff…

EVT_WDF_DEVICE_PREPARE_HARDWARE API

NTSTATUS EVT_WDF_DEVICE_PREPARE_HARDWARE(__inWDFDEVICE Device,__inWDFCMRESLIST ResourcesRaw,__inWDFCMRESLIST ResourcesTranslated); 上面API中ResourcesRaw和ResourcesTranslated类型相同&#xff0c;那他们的区别是啥&#xff1f; 答&#xff1a; EVT_WDF_DEVICE_P…

【前端设计模式】之访问者模式

引言 在前端开发中&#xff0c;我们经常需要处理复杂的对象结构和数据集合。这时候&#xff0c;访问者模式就能派上用场了。访问者模式允许我们将操作和数据结构分离开来&#xff0c;从而实现对复杂对象结构的优雅处理。 访问者模式的特性 访问者模式具有以下特性&#xff1…

iview Table实现跨页勾选记忆功能以及利用ES6的Map数据结构实现根据id进行对象数组的去重

因为iview Table组件的勾选是选中当前页的所有数据,当我们切到别的页面时,会发送请求给后端,这个时候就会刷新我们之前页码已经选中的数据。现在有个需求就是,在我们选择不同页码的数据勾选中之后,实现跨页勾选记忆功能,就是说已经打钩了的数据,不管切到哪一页它都是打钩…

AI聊天专题报告:ChatGPT全景图聊聊技术产品和未来

今天分享的AI系列深度研究报告&#xff1a;《AI聊天专题报告&#xff1a;ChatGPT全景图聊聊技术产品和未来》。 &#xff08;报告出品方&#xff1a;LanguageX&#xff09; 报告共计&#xff1a;22页 争论&#xff1a;ChatGPT算不算技术革命 回应吴军老师“ChatGPT不算新技术…

Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

Dubbo学习

一、整体架构设计分层 接口服务层&#xff08;Service&#xff09;:该层与业务逻辑相关&#xff0c;根据provider和consumer的业务设计对应的接口和实现 配置层&#xff08;Config&#xff09;&#xff1a;对外配置接口&#xff0c;以ServiceConfig和ReferenceConfig为中心 服…

cache 2.单机并发缓存

0.对原教程的一些见解 个人认为原教程中两点知识的引入不够友好。 首先是只读数据结构 ByteView 的引入使用是有点迷茫的&#xff0c;可能不能很好理解为什么需要ByteView。 第二是主体结构 Group的引入也疑惑。其实要是熟悉groupcache&#xff0c;那对结构Group的使用是清晰…

线性回归与逻辑回归:深入解析机器学习的基石模型

目录 一、线性回归 二、逻辑回归 逻辑回归算法和 KNN 算法的区别 分类算法评价维度

QT作业2

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据查看器

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

微服务学习:Nacos微服务架构中的服务注册、服务发现和动态配置Nacos下载

Nacos的主要用途包括&#xff1a; 服务注册与发现&#xff1a;Nacos提供了服务注册和发现的功能&#xff0c;服务提供者可以将自己的服务注册到Nacos服务器上&#xff0c;服务消费者则可以通过Nacos来发现可用的服务实例&#xff0c;从而实现服务调用。 动态配置管理&#xff…

聚观早报 |华为畅享 70正式开售;梦饷科技双12玩法

【聚观365】12月8日消息 华为畅享 70正式开售 梦饷科技双12玩法 华为Mate X5应对火海挑战 谷歌发布AI模型Gemini 字节跳动开启新一轮回购 华为畅享 70正式开售 精致外观与创新科技兼具的华为畅享 70正式开售&#xff0c;1199元起搭载6000mAh超大电池&#xff0c;带来超强…

机器视觉相机镜头光源选型

镜头选型工具 - HiTools - 海康威视 Hikvisionhttps://www.hikvision.com/cn/support/tools/hitools/cl8a9de13648c56d7f/ 海康机器人-机器视觉产品页杭州海康机器人股份有限公司海康机器人HIKROBOT是面向全球的机器视觉和移动机器人产品及解决方案提供商&#xff0c;业务聚焦于…

oracle与sqlsever的区别

oracle与sqlsever的区别 区别一 oracle字符之间连接用|| sqlserver字符之间连接用区别二 oracle字段重命名用as sqlserver字段重命名用区别三 oracle判空用nvl sqlserver判空用isnull区别四 oracle多列合并成一列 select assid, LISTAGG(name, ) within group (order by…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据生成功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…