一、什么是 axios ?

axios是基于 Promise 的 ajax 封装库,也是前端目前最流行的 ajax 请求库。简单地说发送 get、post 请求,是一个轻量级的库,使用时可直接引入。

二、axios 的特点

  1. 异步的 ajax 请求库。
  2. 在浏览器端和 node 端都可以使用。
  3. 支持 Promise API。
  4. 支持请求和响应拦截。
  5. 响应数据自动转换 JSON 数据。
  6. 支持请求取消。
  7. 可以批量发送多个请求。
  8. 客户端支持安全保护,免受 XSRF 攻击。

三、axios API

3.1、安装

/* npm 安装 */
npm install axios --save /* bower 安装 */
bower install axios /* 使用 yarn */
yarn add axios /* cdn 引入 */
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

注:如果简单静态页面使用,建议cdn方式引入。

3.2、axios API

向 axios 传输相关配置参数,创建请求。如:axios(config)

/* 如发送一个post请求的配置参数如下 */
axios({
method: 'post', //请求方法
url: '/user/12345', //访问接口
data: { //传输数据
firstName: 'Fred',
lastName: 'Flintstone'
}
});
/* 如发送一个get请求的配置参数如下 */
axios({
method: 'get',
url: 'http://localhost:80/one',//请求接口
responseType: 'stream'//响应形式
})
.then(function (response) {
response.data.pipe(fs.createWriteStream('save.jpg')) //保存图片
});

3.3、axios 请求方法

上边axios API 每发起一个请求,都需要设置它的请求方法和响应头超时等信息,使用起来比较繁琐,为了方便,axios 为所有支持的请求方法提供了别名,可直接指定方式发起请求,其他参数可通过全局设置。如:

axios('/user/id=1');

上述 axios 直接发送请求,不设置请求方式时,默认使用 get 请求,与 ajax 和 fetch 相同。所以发送的是一个get请求,也可以使用 get 方法发送,如下实例:

axios.get(
'1.txt' ,
{
params:{id:'1'}
}
).then(res=>{
console.log(res);
})
.catch(err=>{
console.log(err);
})

可简写成 axios(url,config)。

具体的其他方法分别为:

axios.request(config)
axios.get( url , config)
axios.delete( url , config)
axios.head( url , config)
axios.options( url , config)
axios.post( url [,data [, config ]])
axios.put( url [,data [, config ]])
axios.patch( url [,data [, config ]])

3.4、批量发送请求

网络请求中往往会有多个网络请求并发执行,有时需要统一处理它们返回结果,所以axios有并发处理。axios.all()可以并行发送多个网络请求,等待请求都返回之后,继续处理。

使用语法:

/* 第一种处理方式 */
axios.all([
axios.get(URL1),
axios.get(URL2),
]).then(res=>{
console.log(res) //返回的res是一个数组,res[0]是第一个请求数据 res[1]是第二个请求数据
}) /* 第二种处理方式 */
axios.all([
axios.get(URL1),
axios.get(URL2),
]).then(
axios.spread((res1,res2)=>{
res1 //是第一个请求返回数据
res2 //是第二个请求返回数据
})
)

使用 axios.spread 能够自动分割请求返回数据。

1.5、全局默认配置

全局默认配置主要作用于每个请求。既节省敲代码的时间,想修改的时候,只需修改一个就可以全部修改掉。

常见的全局默认配置有:

axios.defaults.baseURL = "http://localhost:8080/" //配置域名
axios.defaults.timeout = 6000; //单位是毫秒,设置超时时间 /* 头设置 */
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

3.6、axios 实例

// 实例化的时候配置默认参数
const instance = axios.create({
baseURL: 'https://api.example.com'
}); // Alter defaults after instance has been created
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN

之所以使用 axios 实例化,是因为全局实例化 http 请求有全局的响应拦截,当我们某些接口无法返回状态码时,我们将无法得到 response,此时我们需要在当前 api 中重新实例化一个 axios,设置新的响应拦截码。

3.7、拦截器

拦截器分为两个,有请求拦截和响应拦截,可以统一处理某些业务。

  • 请求拦截器:
/*
请求拦截器
统一在发送请求之前添加token
*/
axios.interceptors.request.use(config=>{
config.headers.token = sessionStorage.getItem("token") //添加toke
return config
},err=>{
console.log(err)//请求错误
})
  • 响应拦截器
axios.interceptors.response.use(response=>{
return response
},err=>{
console.log(err)//响应错误
})

3.8、响应内容

基本使用中,第一个实例请求成功,打印结果 console.log(res) 。返回结果如下:

{
data:{},
status:200,
//从服务器返回的http状态文本
statusText:'OK',
//响应头信息
headers: {},
//config是在请求的时候的一些配置信息
config: {}
}

四、axios 常见应用

axios既可以在浏览器端使用,也可以在node.js中使用。在浏览器端发送的是XMLHttpRequest,在 node.js 发送的是 http 。像VUE、React、Node等项目都可以使用axios。

前后端数据交互(五)——什么是 axios?的更多相关文章

  1. 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用

    随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...

  2. 前后端数据交互(八)——请求方法 GET 和 POST 区别

    WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy! 学习ajax.fetch.axios时,发送网络请求携带参数时,都需要分别处理get和post的参数.所以我 ...

  3. 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)

    一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...

  4. vue-resource的使用,前后端数据交互

    vue-resource的使用,前后端数据交互 1:导入vue与vue-resource的js js下载:   https://pan.baidu.com/s/1fs5QaNwcl2AMEyp_kUg ...

  5. 前后端数据交互处理基于原生JS模板引擎开发

    json数据错误处理,把json文件数据复制到----> https://www.bejson.com/ 在线解析json 这样能直观的了解到是否是json数据写错,在控制台打断点,那里错误打那 ...

  6. web前后端数据交互

    前后端数据交互是每一名web程序员必须熟悉的过程,前后端的数据交互重点在于前端是如何获取后端返回的数据,毕竟后端一般情况下只需要将数据封装到一个jsonMap,然后return就完了.下面通过一个li ...

  7. 前后端数据交互利器--Protobuf

    Protobuf 介绍 Protocol Buffers(又名 protobuf)是 Google 的语言中立.平台中立.可扩展的结构化数据序列化机制. https://github.com/prot ...

  8. Vue小项目二手书商城:(二)axios前后端数据交互

    实现内容: 写路由接口(express) axios取数据 一.写接口 1.我们要在前端取到后端的数据(之前写的data.json)可以用vue-resourse或者用axios,在vue2之后官方就 ...

  9. 前后端数据交互(二)——原生 ajax 请求详解

    一.ajax介绍 ajax 是前后端交互的重要手段或桥梁.它不是一个技术,是一组技术的组合. ajax :a:异步:j:js:a:和:x:服务端的数据. ajax的组成: 异步的 js 事件 其他 j ...

随机推荐

  1. Redis挂了,流量把数据库也打挂了,怎么办?

    你好呀,我是歪歪. 是这样的,前几天有个读者给我发消息,说面试的时候遇到一个场景题: 他说他当时,一时间竟然找不到回答问题的角度,感觉自己没有回答到点子上. 我仔细想了一下,确实是感到这个问题有一丝丝 ...

  2. djinn靶机

    仅供个人娱乐 靶机信息 https://download.vulnhub.com/djinn/djinn.ova 一.主机探测 二.漏洞的查找和利用 21端口ftp 匿名登录 7331端口 命令执行  ...

  3. netty系列之:netty中的ByteBuf详解

    目录 简介 ByteBuf详解 创建一个Buff 随机访问Buff 序列读写 搜索 其他衍生buffer方法 和现有JDK类型的转换 总结 简介 netty中用于进行信息承载和交流的类叫做ByteBu ...

  4. SpringBoot | 3.2 整合MyBatis

    目录 前言 1. 导入MyBatis场景 1.1 初始化导向 1.2 手动导入 2. *MyBatis自动配置原理 3. 全局配置文件 @Mapper @MapperScan 3.1 配置模式 3.2 ...

  5. MSTP

    目录 一.生成树存在的问题 二.MSTP 三.MSTP的网络层次 四.MSTP的端口状态 五.MSTP的保护功能 一.生成树存在的问题 STP和RSTP的问题 PVST的问题 二.MSTP 多生成树 ...

  6. Go interface 原理剖析--类型转换

    hi, 大家好,我是 haohognfan. 可能你看过的 interface 剖析的文章比较多了,这些文章基本都是从汇编角度分析类型转换或者动态转发.不过随着 Go 版本升级,对应的 Go 汇编也发 ...

  7. 虚拟基站(VRS)

      虚拟参考站技术(Virtual Reference Station,简称VRS)也称虚拟基准站技术,是一种网络实时动态测量实时动态测量(RTK)技术,通过在某一区域内建立构成网状覆盖的多个GPS基 ...

  8. C中的内置函数

    1 //#include <stdio.h> 2 //#include <ctype.h> 3 //#include <math.h> 4 //#include & ...

  9. 【NLP学习其五】模型保存与载入的注意事项(记问题No module named 'model')

    这是一次由于路径问题(找不到模型)引出模型保存问题的记录 最近,我试着把使用GPU训练完成的模型部署至预发布环境时出现了一个错误,以下是log节选 unpickler.load() ModuleNot ...

  10. 中文屋 Chinese room

    中文屋 Chinese room 深夜了,假装有个bgm,虽然我真的有个bgm<中间人> 强烈安利,无敌好听,冰老师yyds 开始瞎侃 在经历了机器学习的洗礼以后,感觉人都升华了,本来对于 ...