详解基于 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 学习笔记之操作符
Jan 14 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
Jun 25 Javascript
JS使用cookie设置样式的方法
Jun 30 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
基于JavaScript实现购物车功能
Feb 07 Javascript
关于axios返回空对象的问题解决
Apr 04 Javascript
react中Suspense的使用详解
Sep 01 Javascript
js页面加载后执行的几种方式小结
Jan 30 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 Javascript
微信小程序实现导航栏和内容上下联动功能代码
Jun 29 Javascript
react antd实现动态增减表单
Jun 03 Javascript
webpack介绍使用配置教程详解webpack介绍和使用
Jun 25 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
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
js验证密码强度解析
2020/03/18 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python 时间处理datetime实例
2008/09/06 Python
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
办理暂住证介绍信
2014/01/11 职场文书
关于逃课的检讨书
2014/01/23 职场文书
关于期中考试的反思
2014/02/02 职场文书
元宵晚会主持词
2014/03/25 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
光荣之路观后感
2015/06/12 职场文书
六五普法学习心得体会
2016/01/21 职场文书