详解基于 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 Object的extend是一个常用的功能
Dec 02 Javascript
jQuery中map()方法用法实例
Jan 06 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
JS实现左右无缝轮播图代码
May 01 Javascript
浅谈js中对象的使用
Aug 11 Javascript
ES6所改良的javascript“缺陷”问题
Aug 23 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
Vue.js用法详解
Nov 13 Javascript
微信小程序下拉框搜索功能的实现方法
Jul 31 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 Javascript
vue 封装面包屑组件教程
Nov 16 Javascript
vscode自定义vue模板的实现
Jan 27 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水印技术
2007/02/14 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
js常用数组操作方法简明总结
2014/06/20 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
vue实现分页加载效果
2019/12/24 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
基于Python绘制个人足迹地图
2020/06/01 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
平面设计师的工作职责
2013/11/21 职场文书
物流仓储计划书
2014/01/10 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL