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 相关文章推荐
使用 JScript 创建 .exe 或 .dll 文件的方法
Jul 13 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
js实现TAB切换对应不同颜色的代码
Aug 31 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
Bootstrap Table使用方法详解
Aug 01 Javascript
AngularJS教程之MVC体系结构详解
Aug 16 Javascript
js实现图片左右滚动效果
Feb 27 Javascript
javascript 面向对象function详解及实例代码
Feb 28 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
Apr 25 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 Javascript
vue基础知识--axios合并请求和slot
Jun 04 Javascript
微信小程序 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 session有效期问题
2009/04/26 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
JS实现图片切换特效
2019/12/23 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
python中self原理实例分析
2015/04/30 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
应聘美工求职信
2013/11/07 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
民主生活会发言材料
2014/10/20 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
童年读书笔记
2015/06/26 职场文书
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript