vue-resource 拦截器(interceptor)的使用详解


Posted in Javascript onJuly 04, 2017

拦截器-interceptor

在现代的一些前端框架上,拦截器基本上是很基础但很重要的一环,比如Angular原生就支持拦截器配置,VUE的Axios模块也给我们提供了拦截器配置,那么拦截器到底是什么,它有什么用?

拦截器能帮助我们解决的

1、添加统一的request的参数

比如header中加入X-Requested-With,比如客户端需要实现sign和token的验证机制,比如你可以写$http.get('/files', params),拦截器帮你拼接成 http://www.xxxx.com/1/files 这样的请求地址

2、处理统一的responseError

比如重连机制,拿到error.code错误码重连,比如token过期,重新拿到token再次send request

比如统一报错信息,给所有返回的404来个提示也会很酷

angular interceptor

angular的interceptor是个数组,在 $httpProvider 中进行配置,一般写成一个config, 然后$httpProvider注入进来就可以配置了,把我们写的 interceptor push进去就OK了, $httpProvider.interceptors.push('interceptor') ,interceptor一般写成一个服务

var interceptor = {
 'request': function (config) {
 return config
 },
 'requestError': function (rejection) {
 
 },
 'response': function (response) {
 return response
 },
 'responseError': function (rejection) {

 }
}

return支持返回一个promise,可以对config中的params,data, url, headers等进行加工,符合我们的请求再return出去,所有的$http请求都会被拦截到

vue-resource 拦截器使用

在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.http.interceptors.push((request, next) =>{ 
 //登录成功后将后台返回的TOKEN在本地存下来,每次请求从sessionStorage中拿到存储的TOKEN值 
 let TOKEN=sessionStorage.getItem('STORAGE_TOKEN'); 
 if(TOKEN){ 
  //如果请求时TOKEN存在,就为每次请求的headers中设置好TOKEN,后台根据headers中的TOKEN判断是否放行 
  request.headers.set('TOKEN',TOKEN); 
 } 
 next((response) => { 
  return response; 
 }); 
}); 
/******************拦截器设置请参考这部分(结束)******************/
//拦截器 
        Vue.http.interceptors.push((request, next) => { 
//         console.log(Login.item); 
          var tokens = localStorage.getItem('token'); 
          request.headers.set('Authorization', tokens); 
//         console.log(request.headers); 
          help.showLoading = true; 
           
          next((response) => { 
//           console.log(response); 
            help.showLoading = false; 
            return response 
          }) 
        })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js调用flash的效果代码
Apr 26 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
Mar 05 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
Apr 23 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
使用script的src实现跨域和类似ajax效果
Nov 10 Javascript
jQuery中:hidden选择器用法实例
Dec 30 Javascript
setTimeout内不支持jquery的选择器的解决方案
Apr 28 Javascript
Angularjs中UI Router的使用方法
May 14 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
Jan 21 Javascript
jquery append与appendTo方法比较
May 24 jQuery
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
JavaScript在控件上添加倒计时功能的实现代码
Jul 04 #Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 #Javascript
详解vue-router和vue-cli以及组件之间的传值
Jul 04 #Javascript
详解Angular.js中$http拦截器的介绍及使用
Jul 04 #Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 #Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
Jul 04 #Javascript
详解node如何让一个端口同时支持https与http
Jul 04 #Javascript
You might like
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
下载给定网页上图片的方法
2014/02/18 Python
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
青奥会口号
2014/06/12 职场文书
服务宗旨标语
2014/07/01 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
工作会议通知
2015/04/15 职场文书
寒假生活随笔
2015/08/15 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript