详解基于 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 相关文章推荐
jquery Ajax 实现加载数据前动画效果的示例代码
Feb 07 Javascript
JS实现的左侧竖向滑动菜单效果代码
Oct 19 Javascript
javascript insertAfter()定义与用法示例
Jul 25 Javascript
详解如何较好的使用js
Dec 16 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 Javascript
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 Javascript
layui的面包屑或者表单不显示的解决方法
Sep 05 Javascript
jquery实现垂直手风琴导航栏
Feb 18 jQuery
vue 使用 canvas 实现手写电子签名
Mar 06 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
Oct 23 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
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
PHP源码之explode使用说明
2011/08/05 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
JavaScript中的私有成员
2006/09/18 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
Python中使用Inotify监控文件实例
2015/02/14 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
django-初始配置(纯手写)详解
2019/07/30 Python
Python while true实现爬虫定时任务
2020/06/08 Python
师范生的个人求职信范文
2014/01/04 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
博士导师推荐信
2015/03/25 职场文书
法院答辩状格式
2015/05/22 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
golang的文件创建及读写操作
2022/04/14 Golang