vue-resource 拦截器使用详解


Posted in Javascript onFebruary 21, 2017

在vue项目使用vue-resource的过程中,临时增加了一个需求,需要在任何一个页面任何一次http请求,增加对token过期的判断,如果token已过期,需要跳转至登录页面。如果要在每个页面中的http请求操作中添加一次判断,那么会是一个非常大的修改工作量。那么vue-resource是否存在一个对于任何一次请求响应捕获的的公共回调函数呢?答案是有的!

vue-resource的interceptors拦截器的作用正是解决此需求的妙方。在每次http的请求响应之后,如果设置了拦截器如下,会优先执行拦截器函数,获取响应体,然后才会决定是否把response返回给then进行接收。那么我们可以在这个拦截器里边添加对响应状态码的判断,来决定是跳转到登录页面还是留在当前页面继续获取数据。

下边代码添加在main.js中

Vue.http.interceptors.push((request, next) => {
 console.log(this)//此处this为请求所在页面的Vue实例
 // modify request
 request.method = 'POST';//在请求之前可以进行一些预处理和配置

 // continue to next interceptor

next((response) => {//在响应之后传给then之前对response进行修改和逻辑判断。对于token时候已过期的判断,就添加在此处,页面中任何一次http请求都会先调用此处方法

  
response.body = '...';


return response;

 });
});

在知道此方法之前,鄙人想了一个笨方法,但是也能在一定程度上降低修改工作量。方法是为Vue绑定一个this.$$http.get方法取代this.$http.get方法,每个页面的http请求添加个$在$http前即可。

// ajax.js
function plugin(Vue){
  Object.defineProperties(Vue.prototype,{
    $$http:{
      get(){
        return option(Vue);
      }
    }
  })
}
function option(Vue){
  let v = new Vue();
  return {
    get(a,b){
      let promise = new Promise(function(reslove,reject){
        v.$http.get(a,b).then((res)=>{
          reslove(res)
        },(err)=>{





//处理token过期问题。
        })
      })
      return promise;
    }
  }
}
module.exports=plugin;


//main.js

import ajax from './ajax.js'
Vue.use(ajax)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript学习笔记(二) js一些基本概念
Jun 18 Javascript
制作jquery遮罩层效果导航菜单代码分享
Dec 25 Javascript
jQuery中:enabled选择器用法实例
Jan 04 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
JS弹出窗口插件zDialog简单用法示例
Jun 12 Javascript
javascript 广告移动特效的实现代码
Jun 25 Javascript
ionic组件ion-tabs选项卡切换效果实例
Aug 27 Javascript
浅谈js的ajax的异步和同步请求的问题
Oct 07 Javascript
JS基于贪心算法解决背包问题示例
Nov 27 Javascript
axios中cookie跨域及相关配置示例详解
Dec 20 Javascript
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
微信小程序 template模板详解及实例
Feb 21 #Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 #Javascript
Angular实现购物车计算示例代码
Feb 21 #Javascript
原生js实现倒计时--2018
Feb 21 #Javascript
vue-router:嵌套路由的使用方法
Feb 21 #Javascript
JavaScript中创建对象的7种模式详解
Feb 21 #Javascript
vue-router路由简单案例介绍
Feb 21 #Javascript
You might like
PHP基本语法总结
2014/09/06 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
微信小程序slider组件使用详解
2018/01/31 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
如何基于jQuery实现五角星评分
2020/09/02 jQuery
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
python得到单词模式的示例
2018/10/15 Python
python实现名片管理系统项目
2019/04/26 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
python实现井字棋小游戏
2020/03/04 Python
Python with语句用法原理详解
2020/07/03 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
精彩自我鉴定
2014/01/16 职场文书
西安大雁塔导游词
2015/02/10 职场文书
校长师德表现自我评价
2015/03/05 职场文书
关于童年的读书笔记
2015/06/26 职场文书
早恋主题班会
2015/08/14 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
Python+DeOldify实现老照片上色功能
2022/06/21 Python
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS