详解基于 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
javascript内置对象arguments详解
Mar 16 Javascript
vue.js中$watch的用法示例
Oct 04 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
Jul 12 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
Apr 10 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
优化Vue项目编译文件大小的方法步骤
May 27 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
Mar 23 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
Nov 09 Javascript
vue 封装面包屑组件教程
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
虫族 Zerg 历史背景
2020/03/14 星际争霸
社区(php&&mysql)一
2006/10/09 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
Python的gevent框架的入门教程
2015/04/29 Python
使用python加密自己的密码
2015/08/04 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
python脚本实现验证码识别
2018/06/07 Python
Python中 map()函数的用法详解
2018/07/10 Python
python获取中文字符串长度的方法
2018/11/14 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
如何打开WebSphere远程debug
2014/10/10 面试题
国家励志奖学金获奖感言
2014/01/09 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
中学生英语演讲稿
2014/04/26 职场文书
国旗下演讲稿
2014/05/08 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
平安家庭事迹材料
2014/12/20 职场文书
南京南京观后感
2015/06/02 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL