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 相关文章推荐
使用jQuery避免鼠标双击的解决方案
Aug 21 Javascript
深入理解JavaScript是如何实现继承的
Dec 12 Javascript
js中document.write使用过程中的一点疑问解答
Mar 20 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
Sep 02 Javascript
Vuex 进阶之模块化组织详解
Jan 12 Javascript
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 Javascript
vue+webpack实现异步加载三种用法示例详解
Apr 24 Javascript
微信小程序自定义导航教程(兼容各种手机)
Dec 12 Javascript
jQuery实现容器间的元素拖拽功能
Dec 01 jQuery
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 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实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php实现图片添加水印功能
2014/02/13 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python找出最小的K个数实例代码
2018/01/04 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
sort命令的作用和用法
2013/08/25 面试题
元旦联欢会策划方案
2014/06/11 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript