axios快速上手(简单使用)
axios对ajax请求进行了封装,并且使用promise的链式调用使得网络请求的代码逻辑更为清晰,同时支持async和await的编写方式使代码看起来像同步,更加方便于理解和阅读。axios这个库的体积也不大,先在项目里进行安装,npm i axios --save,然后引入就可以直接使用。
import axios from 'axios'; axios({
url: 'https://httpbin.org/post',
method: 'post', // 默认为get
data: { // post请求传递参数用data, get请求传递参数用params
name: 'macus',
age: 18
}
}).then(value=>{
// 获取请求成功的结果
console.log(value)
}).catch(error=>{
// 获取请求发送失败的结果
console.log('error', error)
})
以下图片是axios的成功响应返回的结果,可以看到返回的信息非常的多,其中data是服务器真正返回的内容,而其它的信息全都是axios提供的,其中包括请求的配置config,头部信息headers,XMLHttpRquest的响应状态
axios还提供了很多的API用于发送不同的网络请求,以上请求还可以写成以下形式,这样就不用写method属性,更为简洁一些
axios.post('https://httpbin.org/get', {
name: 'macus',
age: 18
})
还有很多其它的API
axios.get / axios.put / axios.delete / axios.request
虽然api的名字不同,其实这些api全都是调用的axios.request方法,以下为axios源码,可以看到都是调用的Axios.prototype.request
一般来说,业务的网络请求地址的域名都是固定的,可以在发送请求时定义一个baseURL
// 发送请求时定义baseURL
axios({
baseURL: 'https://httpbin.org',
url: '/post',
method: 'post', // 默认为get
data: {
name: 'macus',
age: 18
}
})
每一个请求都定义一个baseURL使得代码冗余,这里可以在全局的配置项里进行定义
// 通过axios.defaults进行全局配置
axios.defaults.baseURL = 'https://httpbin.org'
axios({
url: '/post',
method: 'post', // 默认为get
data: {
name: 'macus',
age: 18
}
})
当有多个域名用于网络请求时,定义一个默认全局的baseURL就明显不够用了,axios提供了自定义实例的方式,我们可以通过axios.create定义多个实例用于配置不同类型的网络请求,定义之后发送网络请求方式与通过axios这个实例对象去调用一致
const instance = axios.create({
baseURL: 'https://httpbin.org'
}) instance.get('/get', {
params: {
name: 'macus'
}
})
有时候,我们想对请求和响应做一些统一的处理,比如发送请求的时候展示加载的动画、检查请求参数中有没有携带token,如果没有就需要用户登录,再比如,响应报文返回的数据项太多,而我们只需要服务器返回的数据就行,那么这个时候,可以使用拦截器来对请求和响应进行通用的处理,这里再使用上面创建的instance实例对象。
// 对请求进行拦截,分别传入请求成功和失败的处理函数
instance.interceptors.request.use(config=>{
// 可以在这里进行一些逻辑处理
console.log('请求拦截了', config)
// config为请求的配置项信息,必须要有请求报文的返回
return config
}, error=>{
// 处理请求失败
}) // 对响应进行拦截,分别传入响应成功和失败的处理函数
instance.interceptors.response.use(result=>{
console.log('响应拦截了',result)
// result为响应信息,必须将响应报文进行返回
// 只需要服务器返回的data数据,可直接返回data
return result.data
},error=>{
// 失败时的处理方式,如 404 500 等
})
目前每发送一个网络请求,都需要调用axios的实例,假如有一天这个库有bug,或者后续将项目进行优化,想使用别的库,那么有100处发送了网络请求,这100处都需要修改,这样代码的可维护性变得比较差,为了解决这样的问题,我们可以自行进行一个封装,每发送网络请求,都使用我们自定义的函数,这样后续即使想换成别的库,直接修改我们封装的函数就行,下面做一个简单封装的演示
// ajaxRequest.js
import axios from 'axios'
const instance = axios.create({
baseURL: 'https://httpbin.org',
timeout: 5000 // 超时时间
})
export function requestPost(url, data, successCallback, errorCallback){
instance({
url,
data,
method: 'post'
}).then(successCallback)
.catch(errorCallback)
} //调用的页面
import { requestPost} from './ajaxRequest'
requestPost('/post', {name: 'kiki'}, result=>{
console.log('成功了',result)
},error=>{
console.log('失败了',error)
})
以上就是axio的快速上手使用~
axios快速上手(简单使用)的更多相关文章
- springBoot日志快速上手简单配置
默认配置 日志级别从低到高分为: TRACE < DEBUG < INFO < WARN < ERROR < FATAL. 如果设置为 INFO ,则低于 INFO 的信 ...
- 快速上手seajs——简单易用Seajs
快速上手seajs——简单易用Seajs 原文 http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...
- 02 C语言最简单快速上手的IDE
不要让开发环境 成为学习路上的拦路虎,先培养学习兴趣和学习路上的成就感,这个对于激励自己持续学习很重要. 等真正从小白入门了,甚至成为大牛了,能解决诸多困难问题了,安装个开发环境还会再是个什么难事吗? ...
- 快速上手python的简单web框架flask
目录 简介 web框架的重要组成部分 快速上手flask flask的第一个应用 flask中的路由 不同的http方法 静态文件 使用模板 总结 简介 python可以做很多事情,虽然它的强项在于进 ...
- React:快速上手(8)——前后端分离的跨域访问与会话保持
React:快速上手(8)——前后端分离的跨域访问与会话保持 跨域访问 跨域是指从一个域名的网页去请求另一个域名的资源.比如从http://www.baidu.com/ 页面去请求http://www ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 快速上手Unity原生Json库
现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...
- Objective-C快速上手
最近在开发iOS程序,这篇博文的内容是刚学习Objective-C时做的笔记,力图达到用最短的时间了解OC并使用OC.Objective-C是OS X 和 iOS平台上面的主要编程语言,它是C语言的超 ...
- NHibernate3快速上手教程FluentNHibernate配置与DBHelper
很多学习NHibernate的新手很容易卡在配置文件这一关,正所谓万事开头难,上手后再配合官方文档就比较容易了. 网上关于配置文件的资料非常多,但由于版本的问题,许多老的教程中都没有明确指出类库的版本 ...
- 快速上手RaphaelJS-Instant RaphaelJS Starter翻译(一)
(目前发现一些文章被盗用的情况,我们将在每篇文章前面添加原文地址,本文源地址:http://www.cnblogs.com/idealer3d/p/Instant_RaphaelJS_Start ...
随机推荐
- 做了个vscode 小插件,用于修改window 的颜色以区分同时打开的不同工作区,快用起来吧!
Coralize marketplace/coralize 以高效且便捷的方式自定义Visual Studio Code工作区窗口的状态栏.标题栏以及活动边栏等颜色!这将对那些需要同时打开多个vsco ...
- 《 Istio 权威指南 》新著重磅发行!华为云云原生团队匠心力作
摘要:由 Istio社区指导委员会成员和华为云云原生团队联合编著的云原生服务网格书籍< Istio 权威指南>重磅上市 本文分享自华为云社区<< Istio 权威指南 > ...
- 2023-03-25:若两个正整数的和为素数,则这两个正整数称之为“素数伴侣“。 给定N(偶数)个正整数中挑选出若干对,组成“素数伴侣“, 例如有4个正整数:2,5,6,13, 如果将5和6分为一组的
2023-03-25:若两个正整数的和为素数,则这两个正整数称之为"素数伴侣". 给定N(偶数)个正整数中挑选出若干对,组成"素数伴侣", 例如有4个正整数:2 ...
- 2022-10-17:特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等。 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。 给定一个特殊的二进制序列 S,以
2022-10-17:特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等. 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量. 给定一个特殊的二进制序列 S,以 ...
- 2022-08-14:k8s安装PostgreSQL,yaml如何写?
2022-08-14:k8s安装PostgreSQL,yaml如何写? 答案2022-08-14: yaml如下: apiVersion: apps/v1 kind: Deployment metad ...
- 2022-02-02:最接近的二叉搜索树值 II。 给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的 k 个值。 注意: 给定的目标值 ta
2022-02-02:最接近的二叉搜索树值 II. 给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的 k 个值. 注意: 给定的目标值 tar ...
- Request header field userRole is not allowed by Access-Control-Allow-Headers in preflight response.
今使用axios 请求数据过程中遇到同事设置的请求头,在我请求的接口中部不被允许,于是老是提示Request header field userRole is not allowed by Acces ...
- 在asp.net core web api中添加efcore使用codefirst
首先创建webapi项目,我这里使用的版本是.net6 在nuget中添加对应的工具包 红框标出来的是对应的数据库扩展包,mysql用mysql版,sqlserver用sqlserver版,选择正确的 ...
- 常用类API
常用类 API CalendarCalendar 线程不安全 ,不同步获得并设置日历字段值 Calendar 使用两个参数定义了特定于语言环境的 7 天制星期:星期的第一天和第一个星期中的最小一天(从 ...
- 远程挂载 NFS 共享目录引发死机问题
集群的存储空间有限,把一些历史的归档数据放在了公司的另外一台老旧存储服务器上,并使用 NFS 把它挂载到了 log 节点.周末的时候机房空调故障,旧存储服务器挂掉了!周一上班,在集群登陆节点使用df ...