处理登录失效后提示多个错误

问题:

我的场景是后端规定,即使登录失效返回的code仍是200,然后data的code是999什么的;

原本代码:
修改版代码:

通过节

javascript 复制代码
const NotLoginEvent = () => {
  router.replace("/login");
  localStorage.clear();
  Message({
        message: '登录失效,请重新登录',
        type: "error",
        duration: 2.5 * 1000,
      });
}

// respone拦截器
service.interceptors.response.use(
  (response) => {
    /**
     * code为非200是抛错 可结合自己业务进行修改
     */
    const res = response.data;
    if (res.code != "200" && res.code != "0") {
      if (res.code == "999" || res.code == "997" || res.code == "998") {
        let t = localStorage.getItem("logout_timer")  重点代码
        if (!t) {  
          let timer = setTimeout(() => { 
            clearTimeout(timer)
          NotLoginEvent()  
          }, 500)         //节流
          localStorage.setItem("logout_timer", 1)
        }
        return Promise.reject(res);
      }
      Message({
        message: res.msg || res.message,
        type: "error",
        duration: 2.5 * 1000,
      });
      return Promise.reject(res);
    } else {
      return response;
    }
  },
  (error) => {
    Message({
      message: error.response.data.message || error.response.data.msg,
      type: "error",
      duration: 2.5 * 1000,
    });
    return Promise.reject(error.response);
  }
);

流来设置如果出现 999等即登陆过期的情况,报错方法一秒内只执行一次;(PS:如果接口响应较慢有可能又会出现该情况)

场景二:

后端规定当登录过期的时候,response的返回code为401或者非200的数字,便会走request.js里面封装的error方法

javascript 复制代码
 error => {
        NProgress.done()
        if(!error || !error.response || !error.response.data){
            let error = {
                response:{
                    data:{
                        message:'网络异常,请联系客服(400 0828 820电话)'
                    }
                }
            }
            return Promise.reject(error.response.data)
        }
        if(error.response && error.response.data && error.response.data.code=='401' ){
            Message({
                message: "登录已经失效,请您重新登录",
                type: 'error',
                duration: 5 * 1000
            })
            window.localStorage.clear();
            window.sessionStorage.clear() 
            router.push('/login')
            return
        }
        if(error.response.data){
            error.response.data.message = httpCodeTxt[error.response.data.code] || '网络异 
             常,请联系客服(400 0828 820电话)'
        }
        return Promise.reject(error.response.data)
    }
相关推荐
周亚鑫11 分钟前
vue3 pdf base64转成文件流打开
前端·javascript·pdf
落魄小二20 分钟前
el-table 表格索引不展示问题
javascript·vue.js·elementui
y52364821 分钟前
Javascript监控元素样式变化
开发语言·javascript·ecmascript
Justinc.28 分钟前
CSS3新增边框属性(五)
前端·css·css3
fruge35 分钟前
纯css制作声波扩散动画、js+css3波纹催眠动画特效、【css3动画】圆波扩散效果、雷达光波效果完整代码
javascript·css·css3
neter.asia44 分钟前
vue中如何关闭eslint检测?
前端·javascript·vue.js
~甲壳虫44 分钟前
说说webpack中常见的Plugin?解决了什么问题?
前端·webpack·node.js
嚣张农民1 小时前
JavaScript中Promise分别有哪些函数?
前端·javascript·面试
IT技术分享社区1 小时前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
极客代码1 小时前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow