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 相关文章推荐
爱恋千雪-US-AscII加密解密工具(网页加密)下载
Jun 06 Javascript
JavaScript函数、方法、对象代码
Oct 29 Javascript
JavaScript中的Array对象使用说明
Jan 17 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
node.js中的http.createClient方法使用说明
Dec 15 Javascript
jQuery实现文本框输入同步的方法
Jun 20 Javascript
Webpack 实现 Node.js 代码热替换
Oct 22 Javascript
JavaScript观察者模式(经典)
Dec 09 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
Dec 23 Javascript
详解angular用$sce服务来过滤HTML标签
Apr 11 Javascript
js统计页面上每个标签的数量实例代码
May 29 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
MYSQL数据库初学者使用指南
2006/11/16 PHP
PHP无限分类的类
2007/01/02 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
php生成zip文件类实例
2015/04/07 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
Python中的super()方法使用简介
2015/08/14 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
python通过实例讲解反射机制
2019/10/17 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
Python修改DBF文件指定列
2020/12/19 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
JPA的特点
2014/10/25 面试题
建筑工程质量通病防治方案
2014/06/08 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
病假证明模板
2015/06/19 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书