详解基于 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 相关文章推荐
JS动态获取当前时间,并写到特定的区域
May 03 Javascript
javascript等号运算符使用详解
Apr 16 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
Dec 13 Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 Javascript
jquery实现放大镜简洁代码(推荐)
Jun 08 jQuery
JavaScript 保护变量不被随意修改的实现代码
Sep 27 Javascript
Node.js readline模块与util模块的使用
Mar 01 Javascript
JS实现简单的抽奖转盘效果示例
Feb 16 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
Apr 29 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
May 18 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
async和DOM Script文件加载比较
2014/07/20 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
多广告投放代码 推荐
2006/11/13 Javascript
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
python tornado微信开发入门代码
2018/08/24 Python
python通过zabbix api获取主机
2018/09/17 Python
keras K.function获取某层的输出操作
2020/06/29 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
运行Python编写的程序方法实例
2020/10/21 Python
2014年上半年工作自我评价
2014/01/18 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
2014年文员工作总结
2014/11/18 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
联谊活动总结范文
2015/05/09 职场文书
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL