一、axios网络框架
- 包含了对
XMLHttpRequest
浏览器的支持- 能够在node.js环境中发起
http
请求- 支持
Promise
API- 支持拦截请求和响应
- 支持转换请求和响应数据
- 支持取消请求
- 支持自动转换JSON数据
axios
更适合在Vue框架中使用,如果使用ajax
需要引用整个jquery
,而一个jquery
的大小都快抵上Vue
框架的大小了,所以在Vue
中使用ajax
来发送网络请求并不合适。而使用原始的XMLHttpRequest
来发送请求又过于繁琐了。所以更推荐axios
。
安装
1 | npm i axios -s |
二、axios的使用
axios
支持的请求方式
1 | axios(config) |
2.1 发送简单的网络请求
1 | axios({ |
axios
都是经过promise
对象封装的,所有可以大胆的使用promise
的方法
1 | axios({ |
2.2 发送带query参数的请求
发送http://123.207.32.32:8000/api/v1/home/data?type=sell&page=1
这种带有query参数的请求:
1 | axios({ |
2.3 发送并发请求
当需要同时发送多个请求时,可以使用all
方法,这个方法其实就是promise中的all方法,毕竟axios都是经过promise封装过的
1 | axios.all([ |
例如
1 | axios.all([ |
关于then中返回的请求结果res,我是做了一个数组的解构。除此之外更推荐使用axios提供的方法来做
1 | .then(axios.spread((res1,res2)=>{ |
2.4 全局配置
axios为需要全局配置的属性提供了方法
1 | axios.default.xxx= xxx //为需要全局配置的属性赋值 |
例如为全局的axios请求默认的请求时长设置为5秒
1 | axios.default.timeout = 5000 |
2.5 常用的配置项
- 请求地址
1 | url:'地址' |
- 请求类型
1 | method:'' |
- 请求根路径
1 | baseURL:'根路径' |
- 请求前的数据处理
1 | transformRequest:[function(data){}] |
- 请求后的数据处理
1 | transformResponse:[function(data){}] |
- URL查询对象
1 | params:{} |
- 自定义的请求头
1 | headers:{'x-Requested-width':'XMLHttpRequest'} |
- 查询对象序列化函数
1 | paramsSerializer: function(params){} |
- request body
1 | data:{key:value} |
- 超时设置
1 | timeout: 1000 //ms |
- 跨域是否带Token
1 | withCredentials: false |
- 自定义请求处理
1 | adapter: function(resolve, reject, config){} |
- 身份验证信息
1 | auth: { uname:'',pwd: '12'}, |
- 响应的数据格式json / blob /document /arraybuffer / text, stream
1 | responseType: 'json' |
三、axios实例封装
实际开发中,会遇到需要提供大量不同axios请求,且这些请求可能出现比较高的重复性,配置项只有一小部分不同,此时,我们可以将重复出现的不同请求抽离并封装起来
axios提供了实例封装方法axios.create
1 | const instance = axios.create({ |
使用实例发起请求
1 | instance({ |
3.1 请求实例独立封装
在文件中统一定义
请求的实例的定义可以放在独立的文件中,以供调用,并且易于统一管理。
1 | network |
封装样例request.js
1 | import axios from 'axios' |
调用样例main.js
1 | import {request} from './network/request' |
四、拦截器
1 | axios.interceptors |
4.1 请求拦截
1 | axios.interceptors.request |
功能:
- 比如
config
中的数据不符合服务器的要求 - 比如每次发送网络请求时,都希望在网页中加入等待图标
- 某些网络请求,例如
token
,必须携带一些特殊的信息
例如
1 | axios.interceptors.request.use(config => { |
4.2 响应拦截
1 | axios.interceptors.response |
在完成响应时进行拦截
1 | instance.interceptors.response.use(config => { |