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 相关文章推荐
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
IE不支持getElementsByClassName最终完美解决方案
Dec 17 Javascript
jqgrid 表格数据导出实例
Nov 21 Javascript
Javascript玩转继承(一)
May 08 Javascript
JsRender for index循环索引用法详解
Oct 31 Javascript
javascript中对Date类型的常用操作小结
May 19 Javascript
浅谈jquery中next与siblings的区别
Oct 27 Javascript
vue开发调试神器vue-devtools使用详解
Jul 13 Javascript
了解javascript中变量及函数的提升
May 27 Javascript
OpenLayers3实现图层控件功能
Sep 25 Javascript
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
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
提取HTML标签
2006/10/09 PHP
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
php 分库分表hash算法
2009/11/12 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
arguments对象
2006/11/20 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python通过正则表达式选取callback的方法
2015/07/18 Python
详解Python3的TFTP文件传输
2018/06/26 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
中文系学生自荐信范文
2013/11/13 职场文书
拓展训练激励口号
2014/06/17 职场文书
综治维稳工作汇报
2014/10/27 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
2015年底工作总结范文
2015/05/15 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
辩论赛主持人开场白
2015/05/29 职场文书