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 相关文章推荐
利用json获取字符出现次数的代码
Mar 22 Javascript
讨论html与javascript在浏览器中的加载顺序问题
Nov 27 Javascript
JavaScript执行顺序详细介绍
Dec 04 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
Mar 27 Javascript
javascript快速排序算法详解
Sep 17 Javascript
jqueryMobile使用示例分享
Jan 12 Javascript
jQuery倒计时代码(超简单)
Feb 27 Javascript
Vue2.0实现组件数据的双向绑定问题
Mar 06 Javascript
vue定义全局变量和全局方法的方法示例
Aug 01 Javascript
Node.js 多进程处理CPU密集任务的实现
May 26 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
Nov 13 Javascript
JavaScript中展开运算符及应用的实例代码
Jan 14 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
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python基础教程之常用运算符
2014/08/29 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
教师新年寄语
2014/04/03 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
办理房产证委托书
2014/09/18 职场文书
2014年销售员工作总结
2014/12/01 职场文书
Python基础之字符串格式化详解
2021/04/21 Python