详解基于 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框架veryide.librar源代码
Mar 05 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
Feb 05 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
Dec 13 Javascript
Javascript基础教程之switch语句
Jan 18 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
Feb 26 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
layui按条件隐藏表格列的实例
Sep 19 Javascript
Javascript异步编程async实现过程详解
Apr 02 Javascript
vue如何实现关闭对话框后刷新列表
Apr 08 Vue.js
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缓存技术详细总结
2013/08/07 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
在Vue中使用echarts的方法
2018/02/05 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
机器学习python实战之决策树
2017/11/01 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python决策树分类算法学习
2017/12/22 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
python如何使用腾讯云发送短信
2020/09/17 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
药学专业个人的自我评价
2013/12/31 职场文书
升学宴学生致辞
2015/09/29 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
灵能百分百第三季什么时候来?
2022/03/15 日漫