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实现全选与取消的两种简单方法
Feb 22 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
angularjs实现首页轮播图效果
Apr 14 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
Jul 09 Javascript
前端主流框架vue学习笔记第一篇
Jul 26 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
微信小程序分享海报生成的实现方法
Dec 10 Javascript
vue实现绑定事件的方法实例代码详解
Jun 20 Javascript
Vue 列表上下过渡效果的实例代码
Jun 25 Javascript
JS实现超级好看的鼠标小尾巴特效
Dec 01 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 UBB 解析实现代码
2011/11/27 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
PHP URL路由类实例
2013/11/12 PHP
php分页函数完整实例代码
2014/09/22 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
Prototype Template对象 学习
2009/07/19 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
JS使用post提交的两种方式
2015/12/03 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python自动发微信监控报警
2019/09/06 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
学习决心书范文
2014/03/11 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
简易离婚协议书范本
2014/10/24 职场文书
幼儿园教学反思范文
2016/03/02 职场文书