详解基于 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 时间比较实现代码
Oct 28 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
Sep 17 Javascript
Javascript中的几种URL编码方法比较
Jan 23 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
浅谈js中对象的使用
Aug 11 Javascript
利用vue+elementUI实现部分引入组件的方法详解
Nov 22 Javascript
Vue v-for循环之@click点击事件获取元素示例
Nov 09 Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 Javascript
基于Vue+Webpack拆分路由文件实现管理
Nov 16 Javascript
小程序自定义弹框效果
Nov 16 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
第八节 访问方式 [8]
2006/10/09 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
python实现从web抓取文档的方法
2014/09/26 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
Python生成器常见问题及解决方案
2020/03/21 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
《画杨桃》教学反思
2014/04/13 职场文书
模具专业求职信
2014/06/26 职场文书
2014年党总支工作总结
2014/12/18 职场文书
企业工会工作总结2015
2015/05/13 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
python随机打印成绩排名表
2021/06/23 Python
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers