vue框架缓存过期业务处理

序言

一个好的框架,除了满足业务开发的需求基本之外,更重要的是要考虑系统的可扩展性和性能问题,众所周知,开发前期,由于业务的不确定性以及新需求的变更,设计前期无法将所有问题都考虑周到,所以系统的可扩展显得尤为重要。但是,对于一些通过业务的处理,也是一个系统设计初期必须考虑的问题,比如统一异常处理、封装公共返回结果、跨域等,本文主要针对之前本人修改的一个bug,简要介绍下前端如何进行缓存过期跳到登录页面的问题。

开发流程

设计思路:在app.vue页面添加鼠标移动事件,进行全局监听,登录系统后,如果页面没有触发鼠标移动事件,那么到达设置的有效期之后,清空缓存信息,跳转到登录页面;如果在缓存有效期内触发鼠标移动事件,那么重新计时,重新设置30分钟的有效期。

具体实现流程如下:

  1. 在app.vue页面添加鼠标移动事件,代码如下:
<template>
  <div id="app" @mousemove="mouseMoveEvent" @click="mouseMoveEvent">
    <router-view v-if="isRouterAlive" />
  </div>
</template>

2.在app.vue的methods方法中声明函数,并实现具体的业务流程

mouseMoveEvent(){
      let path = ['/login']
      if(!path.includes(this.$route.path)) { //如果不是登录页面的话,页面停止操作30分钟后清空session
        clearTimeout(this.timmer);
        this.init();
      }
    },
    init(){
      this.timmer=setTimeout(()=>{
        //清除session
        sessionStorage.removeItem("sessionData");
        sessionStorage.clear();
        //清除缓存
        this.$cache.reset();
        //跳往登录页面
        this.$router.push({
          path: "/login",
      });
      },30*60*1000);//设置半小时清空session进入登录页
    },

完整代码:

<template>
  <div id="app" @mousemove="mouseMoveEvent" @click="mouseMoveEvent">
    <router-view v-if="isRouterAlive" />
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      isRouterAlive: true,      
      timmer: null,
    };
  },
  provide() {
    return {
      reload: this.reload,
    };
  },
  methods: {
    //然后在需要刷新的页面引入依赖:inject: ['reload'], 在需要执行的地方直接调用方法即可:this.reload()。
    // 在单独页面监听,刷新时调用this.reload(),路由不换,页面内容空白
    reload() {
      this.isRouterAlive = false;
      this.$nextTick(() => {
        this.isRouterAlive = true;
      });
    },

    mouseMoveEvent(){
      let path = ['/login']
      if(!path.includes(this.$route.path)) { //如果不是登录页面的话,页面停止操作30分钟后清空session
        clearTimeout(this.timmer);
        this.init();
      }
    },
    init(){
      this.timmer=setTimeout(()=>{
        //清除session
        sessionStorage.removeItem("sessionData");
        sessionStorage.clear();
        //清除缓存
        this.$cache.reset();
        //跳往登录页面
        this.$router.push({
          path: "/login",
      });
      },30*60*1000);//设置半小时清空session进入登录页
    },


  },
  components: {},
  created: function () {
    // 页面刷新时回到首页,页面有等待的空白
    this.$router.push('/')
  },
};
</script>

结尾
此需求的实现方式可能有很多种,本文只代表个人观点,由于主要做后端开发,接触前端时间较短,文中不完善的地方欢迎大家指正,在编码的道路上一起进步。此外还有另一种实现方式:后台统一做登录异常处理,通过@ExceptionHandler注解声明异常,并将未登录code值返回给前端,然后由前端根据该值做判断是否跳到登录页面,本文不再做具体实现,后台代码如下:

//未登录用户	
@ExceptionHandler(AuthorizationException.class)
public Map<String, Object> unlogin(HttpServletRequest request, HttpServletResponse response){
        return CommonResult.creatReturnObj(ErrorCode.NOTLOGIN);
}

上一篇:解决Ajax需要手动刷新问题


下一篇:js中进入页面后刷新一次,且只刷新一次