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 相关文章推荐
javascript里使用php代码实例
Dec 13 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
Nov 27 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
Nov 30 Javascript
js 自带的sort() 方法全面了解
Aug 16 Javascript
jQuery实现根据生日计算年龄 星座 生肖
Nov 23 Javascript
详解Layer弹出层样式
Aug 21 Javascript
NW.js 简介与使用方法
Feb 01 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
Feb 22 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 Javascript
vue结合el-upload实现腾讯云视频上传功能
Jul 01 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实现图片裁剪、添加水印效果代码
2014/10/01 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
js Function类型
2011/12/04 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
python微信公众号之关键词自动回复
2018/06/15 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Python3数字求和的实例
2019/02/19 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Go 语言中 20 个占位符的整理
2021/10/16 Golang
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python