一、axios网络框架
- 包含了对
XMLHttpRequest浏览器的支持- 能够在node.js环境中发起
http请求- 支持
PromiseAPI- 支持拦截请求和响应
- 支持转换请求和响应数据
- 支持取消请求
- 支持自动转换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 => { |