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 ui css framework
Jun 28 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
Sep 16 Javascript
Ajax执行顺序流程及回调问题分析
Dec 10 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
省市区三级联动下拉框菜单javascript版
Aug 11 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
JS实现图片的不间断连续滚动的简单实例
Jun 03 Javascript
AngularJs自定义服务之实现签名和加密
Aug 02 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
微信小程序select下拉框实现效果
May 15 Javascript
jQuery实现移动端图片上传预览组件的方法分析
May 01 jQuery
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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
linux中cd命令使用详解
2015/01/08 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
python交互式图形编程实例(二)
2017/11/17 Python
python中subprocess批量执行linux命令
2018/04/27 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
电子商务专业个人的自我评价
2013/12/19 职场文书
学校安全工作制度
2014/01/19 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
高中团支书竞选稿
2015/11/21 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
Java对文件的读写操作方法
2022/04/29 Java/Android