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 相关文章推荐
Google韩国首页图标动画效果
Aug 26 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
Js操作Select大全(取值、设置选中等等)
Oct 29 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
Angular实现form自动布局
Jan 28 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
微信小程序生成二维码的示例代码
Mar 29 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
JS多个异步请求 按顺序执行next实现解析
Sep 16 Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
动态实现element ui的el-table某列数据不同样式的示例
Jan 22 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获取英文姓名首字母的方法
2015/07/13 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
Python中用于计算对数的log()方法
2015/05/15 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python中%r和%s的详解及区别
2017/03/16 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
Nike瑞士官网:Nike CH
2021/01/18 全球购物
幼儿园六一亲子活动方案
2014/08/26 职场文书
2014年文员工作总结
2014/11/18 职场文书
繁星春水读书笔记
2015/06/30 职场文书
远程教育学习心得体会
2016/01/23 职场文书
Python pygame实现中国象棋单机版源码
2021/06/20 Python
mysq启动失败问题及场景分析
2021/07/15 MySQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
分享几个简单MySQL优化小妙招
2022/03/31 MySQL