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中yield实用简洁实现方式
Jun 12 Javascript
js如何实现设计模式中的模板方法
Jul 23 Javascript
document.getElementById获取控件对象为空的解决方法
Nov 20 Javascript
JavaScript导出Excel实例详解
Nov 25 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
如何使用bootstrap框架 bootstrap入门必看!
Apr 13 Javascript
微信分享调用jssdk实例
Jun 08 Javascript
一种angular的方法级的缓存注解(装饰器)
Mar 13 Javascript
vue配置请求本地json数据的方法
Apr 11 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
Apr 17 jQuery
通过vue-cli3构建一个SSR应用程序的方法
Sep 13 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中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
比较完整的微信开发php代码
2016/08/02 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
js命名空间写法示例
2015/12/18 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
Python读写配置文件的方法
2015/06/03 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
马来西亚网上购物:Youbeli
2018/03/30 全球购物
什么是网络协议
2016/04/07 面试题
文科教师毕业的自我评价
2014/01/16 职场文书
就业意向书
2014/07/29 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle