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 Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
Nov 13 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
Nov 18 Javascript
JS简单实现禁止访问某个页面的方法
Sep 13 Javascript
js获取Get值的方法
Sep 29 Javascript
javascript中活灵活现的Array对象详解
Nov 30 Javascript
原生JS实现幻灯片
Feb 22 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
js canvas实现画图、滤镜效果
Nov 27 Javascript
js canvas实现5张图片合成一张图片
Jul 15 Javascript
基于JS实现数字动态变化显示效果附源码
Jul 18 Javascript
vant IndexBar实现的城市列表的示例代码
Nov 20 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内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
python list转dict示例分享
2014/01/28 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
C++是不是类型安全的
2014/02/18 面试题
采购内勤岗位职责
2013/12/10 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
公司年终奖分配方案
2014/06/16 职场文书
中小学生学籍证明
2014/10/25 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
文明上网主题班会
2015/08/14 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS