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

问题:

我的场景是后端规定,即使登录失效返回的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)
    }
相关推荐
kyriewen35 分钟前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒1 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
山河木马1 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
小林攻城狮2 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦2 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer2 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队2 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY2 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程
远航_2 小时前
OpenSpec 完整详细介绍
前端·后端
召钱熏3 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端