Vue进阶(幺伍伍):vue-resource 拦截器 interceptors 使用_vue.http.interceptors-程序员宅基地

技术标签: vue-resource  vue  # Vue2  interceptors  


一、前言

vue项目使用vue-resource实现异步加载的过程中,需要在任何一个页面任何一次http请求过程中,增加对token过期的判断,如果token已过期,需要跳转至登录页面。如果要在每个页面中的http请求操作中添加一次判断,那将会是一个非常大的修改工作量。那么vue-resource是否存在一个对于任何一次请求响应捕获的的公共回调函数呢?答案是有的!

vue-resourceinterceptors拦截器的作用正是解决此需求的妙方。在每次http请求响应之后,如果设置了拦截器,会优先执行拦截器函数,获取响应体,然后才会决定是否把response返回给then进行接收。那么我们可以在这个拦截器里边添加对响应状态码的判断,来决定是跳转到登录页面还是留在当前页面继续获取数据。
在这里插入图片描述

二、安装与引用

NPM: npm install vue-resource --save-dev

/*引入Vue框架*/
import Vue from 'vue'
/*引入资源请求插件*/
import VueResource from 'vue-resource'

/*使用VueResource插件*/
Vue.use(VueResource)

下边代码添加在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;

  });
});

三、拦截器实例

3.1 为请求添加 loading 效果

通过inteceptor,可以为所有的请求处理加一个loading:请求发送前显示loading,接收响应后隐藏loading

具体步骤如下:

//1、添加一个loading组件
<template id='loading-template'>
    <div class='loading-overlay'></div>
</template>

//2、将loading组件作为另外一个Vue实例的子组件
var help = new Vue({
    
    el: '#help',
    data: {
    
        showLoading: false
    },
    components: {
    
        'loading': {
    
            template: '#loading-template',
        }
    }
})

//3、将该Vue实例挂载到某个HTML元素
<div id='help'>
    <loading v-show='showLoading'></loading>
</div>

//4、添加inteceptor
Vue.http.interceptors.push((request, next) => {
    
    loading.show = true;
    next((response) => {
    
        loading.show = false;
        return response;
    });
});

但是,当用户在画面上停留时间太久时,视图数据可能已经不是最新的了,这时如果用户删除或修改某一条数据,如果这条数据已经被其他用户删除了,服务器会反馈一个404的错误,但由于putdelete请求没有处理errorCallback,所以用户是不知道他的操作是成功还是失败了。这个问题,同样也可以通过inteceptor解决。

3.2 为请求添加共同的错误处理方法

//1、继续沿用上面的loading组件,在#help元素下加一个对话框
<div id='help'>
    <loading v-show='showLoading' ></loading>
    <modal-dialog :show='showDialog'>
        <header class='dialog-header' slot='header'>
            <h3 class='dialog-title'>Server Error</h3>
        </header>
        <div class='dialog-body' slot='body'>
            <p class='error'>Oops,server has got some errors, error code: {
    {
    errorCode}}.</p>
        </div>
    </modal-dialog>
</div>

//2、给help实例的data选项添加两个属性
var help = new Vue({
    
        el: '#help',
        data: {
    
            showLoading: false,
            showDialog: false,
            errorCode: ''
        },
        components: {
    
            'loading': {
    
                template: '#loading-template',
            }
        }
    })

//3、修改inteceptor
Vue.http.interceptors.push((request, next) => {
    
    help.showLoading = true;
    next((response) => {
    
        if(!response.ok){
    
            help.errorCode = response.status;
            help.showDialog = true;
        }
        help.showLoading = false;
        return response;
    });
});

四、拓展阅读

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunhuaqiang1/article/details/111315184

智能推荐

JAVA实现Linux网卡绑定_Linux双网卡绑定脚本的方法示例-程序员宅基地

文章浏览阅读209次。linux运维及配置工作中,常常会用到双网卡绑定,少数几台服务器的配置还好,如果是需要配置几十甚至上百台,难免会枯燥乏味,易于出错,我编写了这个双网卡绑定的辅助脚本,可傻瓜式地完成linux双网卡绑定工作,当然,该脚本主要还是用于小批量的系统配置,如需配置大量的服务器,可提取脚本中的bonding函数,稍作修改即可,你值得一试!1.适用范围该shell脚本可在以下linux系统创建多个绑定网卡,用..._java master网卡

2023年华数杯赛题浅析_隔热材料的结构优化控制研究-程序员宅基地

文章浏览阅读2.5k次。为了方便大家跟更好的选题,这里首先对华数杯的三道题目进行简要浅析,分析三个问题未来做题阶段可能遇到的难点,已经可能涉及所需要的数模知识。问题二根据给出的数据建立优化模型,以整体热导率为目标函数,单根A纤维的直径及调整织物的经密、纬密、弯曲角度等作为约束条件进行求解​;问题三,问题二优化模型的延深,引入新的条件进行求解。该题,为纯粹的优化类型题目,因此对于大家的优化模型掌握能力是个考验。与目标样的色差最接近为目标,构建优化模型​,约束条件有色差要求等等;问题四,依旧是问题二三优化模型的深入,寻找。_隔热材料的结构优化控制研究

TCP/IP 端口号大全_ldap端口363-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏8次。*备查之用 *本贴连接 http://www.douban.com/group/topic/7647051 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qo_ldap端口363

【Hyper-V】1.在Windows11启用Hyper-V_win11 hyper-v-程序员宅基地

文章浏览阅读6.7k次,点赞3次,收藏14次。Hyper-V是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化,让用户在windows系统上以虚拟机的方式使用多个不同的操作系统。_win11 hyper-v

私有化部署-程序员宅基地

文章浏览阅读7.5k次。私有化部署_私有化部署

github action 基于个人项目实践_github action实战-程序员宅基地

文章浏览阅读1.4k次。自动化构建自己的服务_github action实战

随便推点

空间数据分析知识点_geray c-程序员宅基地

文章浏览阅读9.6k次,点赞9次,收藏102次。【转】http://blog.sina.com.cn/s/blog_54388b8301011cxp.html空间数据分析 1. 空间分析:(spatial analysis,SA)是基于地理对性的位置和形态特征的空间数据分析技术,其目的在于提取和传输空间信息,是地理信息系统的主要特征,同时也是评价一个地理信息系统功能的主要指标之一,是各类综合性地学分析模型的基础,_geray c

IntelliJ Idea 常用11款插件(提高开发效率),附优秀主题插件_idea 像西红柿插件-程序员宅基地

文章浏览阅读679次。插件安装方式:新版本IDE安装方式略有不同,不一一赘述1、Background Image Plus这款插件并不能直接提高你的开发效率,但是可以让你面对的IDE不再单调,当把背景设置成你自己心仪的的图片,是不是会感觉很赏心悦目,编码效率会不会因此间接的提高?!使用方法:注意,如果是IDEA版本是2020.1版本以上就不需要再额外装这个插件,这个插件是已经内置安装了。2、Mybatis Log PluginMybatis现在是java中操作数据库的首选,在开发..._idea 像西红柿插件

java ajax实现增删改查,03.bootstrap+Ajax+SSM(maven搭建)实现增删改查-程序员宅基地

文章浏览阅读666次。功能点:分页数据校验ajaxRest风格的URI:使用HTTP协议请求方式的动词,来表示对资源的操作(GET(查询),POST(新增),PUT(修改),DELETE(删除))技术点基础框架-ssm数据库mysql前端框架-bootstrap项目依赖 -Maven分页 -pagehelper逆向工程-Mybatis Generator实现效果添加按钮弹出模态框编辑按钮弹出模态框删除基础环境搭建1)新..._ssmajax删除

Oracle 如何使用时间日期字段计算时间差_oracle sql 查询的日期差8小时-程序员宅基地

文章浏览阅读1k次。Oracle 如何使用时间日期字段计算时间差因为业务需要计算耗时,在检查数据库的时候发现时间是分成两个字段来存储的,日期和时间,字段类型都是字符串。思路:将两个字符串连接起来,通过TO_DATE转换成时间,TO_NUMBER将两个时间差转为数值。得到的结果是以‘天’为单位。TO_NUMBER(TO_DATE((WC.OPERATEDATE || ’ ’ || WC.OPERATETIME),..._oracle sql 查询的日期差8小时

Vuex报错:[vuex] must call Vue.use(Vuex) before creating a store instance.解决方法-程序员宅基地

文章浏览阅读1.2k次。Vuex报错:[vuex] must call Vue.use(Vuex) before creating a store instance._[vuex] must call vue.use(vuex) before creating a store instance.

java中类、对象、实例的关系_java类和实例的关系-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏13次。java中类、对象、实例的关系 (刚刚接触java,难免有许多错误,欢迎指正) java作为面向对象编程语言,作为初学者首先要分清类、对象、实例之间的关系是必要的。 正所谓物以类聚,类就是一些具有某些相同特性的“物”的集合,比如“人”这样的类,每个人都有姓名、年龄、性别等特性。对象就是某一个人,比如说“张三”,“人”这个类是很多的像“张三”、“李四”这样的对象的集合。对象是一个抽象的概念_java类和实例的关系

推荐文章

热门文章

相关标签