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 text()要注意啦
Oct 30 Javascript
JavaScript中的prototype使用说明
Apr 13 Javascript
jquery插件validate验证的小例子
May 08 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
Aug 21 Javascript
jQuery scrollFix滚动定位插件
Apr 01 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
BootStrap表单宽度设置方法
Mar 10 Javascript
Javascript调试之console对象——你不知道的一些小技巧
Jul 10 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
vue中实现图片和文件上传的示例代码
Mar 16 Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 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技术开发技巧分享
2010/03/23 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
javascript闭包入门示例
2014/04/30 Javascript
JavaScript错误处理
2015/02/03 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
用python写asp详细讲解
2013/12/16 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
python isinstance函数用法详解
2020/02/13 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
用 Python 制作地球仪的方法
2020/04/24 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
Python容器类型公共方法总结
2020/08/19 Python
《逃家小兔》教学反思
2014/02/23 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
2014年班组长工作总结
2014/11/20 职场文书
期末考试复习计划
2015/01/19 职场文书
暗恋桃花源观后感
2015/06/12 职场文书