axios封装(基于vue-cli3)
上一篇文章中我简单的介绍了下vue的动态路由Vue动态路由的实现(基于vue-cli3),这篇文章我们就来好好说说axios的封装复用,有需要的朋友可以做一下参考。有什么错误还望指出,大神勿喷。
axios简介
自从Vue2.0推荐大家使用axios开始,axios被越来越多的人所了解。下面我们先来说说什么是axios。
基于promise用于浏览器和node.js的http客户端
axios的特点是什么呢?
- 支持浏览器和node.js
- 支持promise
- 能拦截请求和响应
- 能转换请求和响应数据
- 能取消请求
- 自动转换JSON数据
- 浏览器端支持防止CSRF(跨站请求伪造)
封装axios
关于axios的引用、安装等步骤在这里不做具体描述,感兴趣的小伙伴可以去看看我的github,有一个详细的Demo,地址在本文最后。
好了,废话不多说,直接上代码
1 | import axios from 'axios'; |
在封装axios的过程中,我引用了一个请求队列来过滤重复的请求。第一次请求的时候,向队列中添加一个标识(我用的是接口的url加上请求方法),每次成功接收到返回值后,去除该队列中的标识,如果该接口还未成功,这时又请求一个相同的接口,使用axios取消请求的方式去除队列中的上次接口。
更完美的做法是还可以添加一个缓存队列用来解决高并发的问题,但逻辑比较复杂,目前项目中也用不到,以后有机会再补上。
请求配置
axios在使用的过程中拥有丰富的配置项,下面是所有可用的请求配置项,只有url是必填,默认的请求方法是GET,如果没有指定请求方法的话。
1 | { |
全局修改axios默认配置
1 | axios.defaults.baseURL = 'https://api.example.com'; |
实例默认配置
1 | // 创建实例时修改配置 |
实例配置的优先级
配置项通过一定的规则合并,request config > instance.defaults > 系统默认,优先级高的覆盖优先级低的。
1 | // 创建一个实例,这时的超时时间为系统默认的 0 |
axios使用
个人在写代码时喜欢将接口抽取出来放在一个单独的文件中。虽然加重了一部分代码量,但是对于后期的维护更加方便。当然这只是我个人的习惯,There are a thousand Hamlets in a thousand people’s eyes.
比如说我们在调用登录接口的时候
api/auth/login.js
1 | export function LoginByUserName(userLoginObj) { |
先将接口定义在login.js这个文件中,然后在使用的时候直接调用就可以了
store/module/user.js(vuex)
1 | import { LoginByUserName } from '@/api/auth/login'; |
在其它地方使用类似,具体使用可以参考我的github,哪里我已经准备好了一个完整demo vue-config-web,欢迎star。
本文完