详解基于 axios 的 Vue 项目 http 请求优化


Posted in Javascript onSeptember 04, 2017

对于需要大量使用 http 请求的项目,我们通常会选择对 http 请求的方法进行二次封装,以便增加统一的拦截器,或者统一处理阻止重复提交之类的逻辑。Vue.js 的项目中我们选择使用了 axios 这样一个 http 库,下面也就简述下基于 axios 做的简单二次封装

依赖

首先引入 axios ,对于 ie9 这样不支持 promise 的浏览器还需引入 es6-promise 模块

require('es6-promise').polyfill();
var axios = require('axios');

axios 初始化

初始化我们要实现两个需求:

1.发送请求时带上 cookies

2.重发发送请求时,如果前一次相同请求还未结束则中止前一次请求

const httpServer = axios.create({
  responseType: 'json',
  withCredentials: true, // 设置 withCredentials 使请求带上 `cookies`
  cancelToken: new axios.CancelToken(function (c) {
    cancel = c // 记录当前请求的取消方法
  })
})

http 请求二次封装

var promiseArr = {} // 用于记录每个请求的取消方法

const gUtils = {
  getData: function () {
    let cancel
    const httpServer = axios.create({
      responseType: 'json',
      withCredentials: true, // 设置 withCredentials 使请求带上 `cookies`
      cancelToken: new axios.CancelToken(function (c) {
        cancel = c // 记录当前请求的取消方法
      })
    })
    
    // 设置一个拦截器,每次发起请求前取消掉在进行中的相同请求
    httpServer.interceptors.request.use(function (config) {
     if (promiseArr[config.url]) {
      promiseArr[config.url]('操作取消')
      promiseArr[config.url] = cancel
     } else {
      promiseArr[config.url] = cancel
     }
  
     return config
    }, function (err) {
     // return Promise.reject (error)
    })
  
    return httpServer
  }
}

这样我们在对接服务时候直接使用我们封装好的 http 请求方法即可

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
Oct 17 Javascript
JS实现仿QQ聊天窗口抖动特效
May 10 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
Dec 15 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
TypeScript入门-基本数据类型
Mar 28 Javascript
解读vue生成的文件目录结构及说明
Nov 27 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 Javascript
vue.js中导出Excel表格的案例分析
Jun 11 Javascript
基于form-data请求格式详解
Oct 29 Javascript
JS函数进阶之prototy用法实例分析
Jan 15 Javascript
JS实现颜色的10进制转化成rgba格式的方法
Sep 04 #Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
Sep 04 #Javascript
JS实现匀加速与匀减速运动的方法示例
Sep 04 #Javascript
node-sass安装失败的原因与解决方法
Sep 04 #Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
Sep 04 #Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 #Javascript
React教程之Props验证的具体用法(Props Validation)
Sep 04 #Javascript
You might like
Laravel框架路由设置与使用示例
2018/06/12 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python排序算法实例代码
2017/08/10 Python
python写日志文件操作类与应用示例
2019/07/01 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
python re模块和正则表达式
2021/03/24 Python
写好求职信第一句话的技巧
2013/10/26 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
五年级音乐教学反思
2014/02/06 职场文书
《老山界》教学反思
2014/04/08 职场文书
超市店庆活动方案
2014/08/31 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
Python可视化神器pyecharts绘制水球图
2022/07/07 Python