详解基于 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 相关文章推荐
如何判断元素是否为HTMLElement元素
Dec 06 Javascript
分享一个自己动手写的jQuery分页插件
Aug 28 Javascript
js封装可使用的构造函数继承用法分析
Jan 28 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
理解javascript异步编程
Jan 27 Javascript
Vue.js教程之axios与网络传输的学习实践
Apr 29 Javascript
深入浅析javascript继承体系
Oct 23 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 Javascript
微信小程序数据分析之自定义分析的实现
Aug 17 Javascript
小程序实现可拖动的悬浮按钮
Sep 07 Javascript
vue elementUI表格控制对应列
Apr 13 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 fsockopen函数被禁用的解决办法
2013/08/07 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
php操作redis缓存方法分享
2015/06/03 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
python实现简易云音乐播放器
2018/01/04 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
AUC计算方法与Python实现代码
2020/02/28 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
国际贸易毕业生求职信范文
2014/02/21 职场文书
《四季》教学反思
2014/04/08 职场文书
门前三包责任书
2014/04/15 职场文书
大学生励志演讲稿
2014/04/25 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
2014年车间工作总结
2014/11/21 职场文书
幼师个人总结范文
2015/02/28 职场文书
荒岛余生观后感
2015/06/09 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers