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 处理 URL 的两个函数代码
Aug 13 Javascript
基于jquery的无刷新分页技术
Jun 11 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
javascript实现根据身份证号读取相关信息
Dec 17 Javascript
JavaScript异步加载浅析
Dec 28 Javascript
JavaScript数据类型转换的注意事项
Jul 31 Javascript
学习掌握JavaScript中this的使用技巧
Aug 29 Javascript
基于JavaScript实现淘宝商品广告效果
Aug 10 Javascript
vscode中vue-cli项目es-lint的配置方法
Jul 30 Javascript
微信小程序实现多选框全选与取消全选功能示例
May 14 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
node.js如何自定义实现一个EventEmitter
Jul 16 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 和 HTML
2006/10/09 PHP
如何把PHP转成EXE文件
2006/10/09 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
javascript 播放器 控制
2007/01/22 Javascript
javascript定义函数的方法
2010/12/06 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
javascript每日必学之循环
2016/02/19 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
Vue中图片Src使用变量的方法
2019/10/30 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
J2EE相关知识面试题
2013/08/26 面试题
安全生产宣传标语
2014/06/06 职场文书
在校实习生求职信
2014/06/18 职场文书
建党伟业电影观后感
2015/06/01 职场文书
五一晚会主持词
2015/07/01 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
优化Mysql查询的示例
2022/04/26 MySQL