axios封装_VUE.JS请求工具Axios的封装
接触vue已经很长时间,也经常使用axios,但是原生封装的方法都很难满足日程开发的需求,所以这期就写一下axios的封装。
作者:陈宝玉啊
转发链接:https://www.jianshu.com/p/a5c8ce9542e6
底部有完整代码
1.前期准备
创建一个js文件,命名自定。我这里定义为request.js
import axios from 'axios' //导入原生的axios import qs from 'qs'; //导入qs,做字符串的序列化,为了后面不同的场景使用。import { MessageBox, Message} from 'element-ui' //引入element-ui的两个组件,分别是消息框和消息提示 import store from '@/store' //引入状态管理仓库import router from '@/router' //引入路由import { getToken} from '@/utils/auth' //根据业务需求,这个方法是用来获取Token
2.创建实例
// 创建一个axios实例const service = axios.create({ baseURL: 'XXXXXX', // url = base url + request url withCredentials: true, // 当跨域请求时发送cookie timeout: 15000 // 请求时间})
3.请求拦截器
在发送请求之前做些什么
service.interceptors.request.use( config => { if (store.getters.token) { // 让每个请求携带令牌——['Has-Token']作为自定义密钥。 // 请根据实际情况修改。 config.headers['Has-Token'] = getToken() } //在这里根据自己相关的需求做不同请求头的切换,我司是需要使用这两种请求头。 if (config.json) { config.headers['Content-Type'] = 'application/json' } else { config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' config.data = qs.stringify(config.data); //利用qs做json序列化 } return config }, error => { // 处理请求错误 console.log(error) // 调试 return Promise.reject(error) })
4.响应拦截器
在收到相应后做些什么
service.interceptors.response.use( response => { const res = response.data //这是响应返回后的结果 //在这里可以根据返回的状态码对存在响应错误的请求做拦截,提前做处理。 //以下为我司的处理规则 // 如果自定义代码不是200,则判断为错误。 if (res.code == 200 || res.code == 300) { // 重新登陆 MessageBox.confirm('您的登录状态存在问题,您可以取消以停留在此页面,或再次登录', '系统提示', { confirmButtonText: '重新登录', type: 'warning' }).then(() => { store.dispatch('user/resetToken').then(() => { location.reload(); }) }) return } else { if (res.code == 700) { Message.warning('您没有获取请求的权限!') router.replace({ path: '/401' }) return } else { return res } } //end }, error => { console.log('err' + error) Message({ message: error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) })
5.抛出实例
export default service
6.如何调用
//以我司请求为例子import request from '@/utils/request'export function getCity(data) { return request({ url: '/getCity/findParentId', method: 'post', data })}
7.完整代码
import axios from 'axios'import qs from 'qs';import { MessageBox, Message} from 'element-ui'import store from '@/store'import router from '@/router'import { getToken} from '@/utils/auth'// 创建一个axios实例const service = axios.create({ baseURL: 'XXXXX', withCredentials: true, timeout: 15000 })service.interceptors.request.use( config => { if (store.getters.token) { // 让每个请求携带令牌——['Has-Token']作为自定义密钥。 // 请根据实际情况修改。 config.headers['Has-Token'] = getToken() } //在这里根据自己相关的需求做不同请求头的切换,我司是需要使用这两种请求头。 if (config.json) { config.headers['Content-Type'] = 'application/json' } else { config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' config.data = qs.stringify(config.data); //利用qs做json序列化 } return config }, error => { // 处理请求错误 console.log(error) // 调试 return Promise.reject(error) })service.interceptors.response.use( response => { const res = response.data //这是响应返回后的结果 //在这里可以根据返回的状态码对存在响应错误的请求做拦截,提前做处理。 //以下为我司的处理规则 // 如果自定义代码不是200,则判断为错误。 if (res.code == 200 || res.code == 300) { // 重新登陆 MessageBox.confirm('您的登录状态存在问题,您可以取消以停留在此页面,或再次登录', '系统提示', { confirmButtonText: '重新登录', type: 'warning' }).then(() => { store.dispatch('user/resetToken').then(() => { location.reload(); }) }) return } else { if (res.code == 700) { Message.warning('您没有获取请求的权限!') router.replace({ path: '/401' }) return } else { return res } } //end }, error => { console.log('err' + error) Message({ message: error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) })export default service
作者:陈宝玉啊
转发链接:https://www.jianshu.com/p/a5c8ce9542e6
axios封装_VUE.JS请求工具Axios的封装相关推荐
- python django前后台分离项目 请求工具axios(复制 粘贴即可使用)
python django前后台分离项目中固定写法: 利用axios对接口数据进行请求并渲染 -------------------request.js-------------------- imp ...
- android post请求_Vue 网络请求框架 axios 使用教程
点击上方"代码集中营",设为星标 优秀文章,第一时间送达! 前期回顾 1. Vue 学习入门指南 2. Vue 入门环境搭建 3. Visual Studio Code 使用指南 ...
- vue 获取url地址的参数_Vue 网络请求框架 axios 使用教程
点击上方"代码集中营",设为星标 优秀文章,第一时间送达! 前期回顾 1. Vue 学习入门指南 2. Vue 入门环境搭建 3. Visual Studio Code 使用指南 ...
- 发送http和https请求工具类 Json封装数据
在一些业务中我们可要调其他的接口(第三方的接口) 这样就用到我接下来用到的工具类. 用这个类需要引一下jar包的坐标 <dependency><groupId>org.jsou ...
- 基于HttpURLConnection 网络请求工具类的封装
HttpUtils: /*** Created by xiaoyehai on 2018/5/21 0021.*/public class HttpUtils {//线程池private static ...
- js请求结果拦截机器_分享:一步一个脚印,vue入门之axios的应用及拦截封装
一.概述 在vue2.0项目中,我们主要使用axios进行http请求. axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特征: 1.从浏览器中创建X ...
- 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...
- [js] fetch和axios请求的原理都是基于XMLHttpRerequst吗?
[js] fetch和axios请求的原理都是基于XMLHttpRerequst吗? axios是基于XMLHttpRequest的封装,而fetch是js原生支持的网络请求api,这在浏览器底层进行 ...
- axios vue 回调函数_vue中ajax请求与axios包完美处理
这次给大家带来vue中ajax请求与axios包完美处理,vue中ajax请求与axios包处理的注意事项有哪些,下面就是实战案例,一起来看一下. 在vue中,经常会用到数据请求,常用的有:vue-r ...
最新文章
- Python基本语法_强制数据类型转换
- 统一代码风格工具 editorConfig
- 湖南计算机应用专业较好的学校,好的计算机应用专业排名
- 【帖子收藏】ansible 中的循环:with_file 和 with_fileglob
- C#:invoke 与 BeginInvoke使用区别
- Python pytest框架之@pytest.fixture()和conftest详解
- XAF-UI元素概述
- 4999元起!华为Mate 40今日开启预售:搭载麒麟9000E
- 【Elasticsearch】match_phrase搜不出来,怎么办
- linux到windows的ssh,ssh如何使用pxsh从linux到windows
- Scala学习02——Scala类和对象
- C++函数参数中的省略号
- DM642的PCI驱动编程笔记:遍历一块内存空间的源码
- python多窗口显示内容_如何在一个窗口中显示多个页面?
- 游戏设计15大参考法则
- Linus 大神的在家办公经验(他也撸猫)
- 泰山OFFICE技术讲座:为字体调整字间距的研究,设置值何时生效
- 计算机组装前工具的准备,计算机组装 必备工具
- 20轮廓-hu不变矩的测试程序
- 万能 Makefile 模板