详解基于 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 动态添加表格行
Jun 22 Javascript
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
WebSocket实现简单客服聊天系统
May 12 Javascript
浅谈React Native 中组件的生命周期
Sep 08 Javascript
vue2.0使用swiper组件实现轮播效果
Nov 27 Javascript
JavaScript同源策略和跨域访问实例详解
Apr 03 Javascript
JavaScript如何实现图片处理与合成
May 29 Javascript
探索浏览器页面关闭window.close()的使用详解
Aug 21 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防注入漏洞过滤函数代码
2012/04/11 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
基于jquery的滚动新闻列表
2010/06/19 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
python实现udp数据报传输的方法
2014/09/26 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
职业生涯规划怎么写
2013/12/29 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
党的生日活动方案
2014/08/15 职场文书
教师求职自荐信范文
2015/03/04 职场文书
医院党建工作总结2015
2015/05/26 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
用Python创建简易网站图文教程
2021/06/11 Python
Java中try catch处理异常示例
2021/12/06 Java/Android
浅析JavaScript中的变量提升
2022/06/01 Javascript