详解基于 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 相关文章推荐
Extjs中通过Tree加载右侧TabPanel具体实现
May 05 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
Aug 02 Javascript
js中substring和substr的详细介绍与用法
Aug 29 Javascript
Javascript 颜色渐变效果的实现代码
Oct 01 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
jquery点击改变class并toggle的实现代码
May 15 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
Apr 23 Javascript
AngularJS 限定$scope的范围实例详解
Jun 23 Javascript
JS原生带小白点轮播图实例讲解
Jul 22 Javascript
addeventlistener监听scroll跟touch(实例讲解)
Aug 04 Javascript
Angular模板表单校验方法详解
Aug 11 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 启动报错如何解决
2014/01/17 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
理解javascript回调函数
2014/12/28 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
绿化工程实施方案
2014/03/17 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
红歌会主持词
2015/07/02 职场文书
导游词之张家界
2019/10/31 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS