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 相关文章推荐
IE bug table元素的innerHTML
Jan 11 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
jQuery实现判断滚动条到底部
Jun 23 Javascript
JQuery实现鼠标滚轮滑动到页面节点
Jul 28 Javascript
详解JavaScript中this关键字的用法
May 26 Javascript
Bootstrap Paginator分页插件使用方法详解
May 30 Javascript
微信小程序中hidden不生效原因的解决办法
Apr 26 Javascript
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
微信小程序生成分享海报方法(附带二维码生成)
Mar 29 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
Jun 03 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 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上传文件并显示上传进度的方法
2015/03/24 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
python如何调用字典的key
2020/05/25 Python
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
创新比赛获奖感言
2014/02/13 职场文书
安全保证书
2015/01/16 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
Python如何用re模块实现简易tokenizer
2022/05/02 Python