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

问题:

我的场景是后端规定,即使登录失效返回的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)
    }
相关推荐
guodingdingh21 分钟前
软件开发工作问题总结0718
java·开发语言·数据库
寅时码2 小时前
React 之死·终章:一个 useRef,把闭包陷阱、依赖数组、漫天 rerender 全送走
前端·react.js·ai编程
不好听6132 小时前
HTML 事件监听机制:从 DOM Level 0 到 React 合成事件
前端·react.js·html
wordbaby2 小时前
为什么刷新页面就 404?聊聊 SPA 路由与 Nginx 的那点事
前端
daols882 小时前
vxe-table 渲染器教程一:实现金额输入控件
javascript·vue.js·vxe-table
不好听6132 小时前
React 核心概念:JSX、组件与数据驱动
前端·react.js
触底反弹2 小时前
🔥 React 零基础入门(中):500 行屎山代码到组件化的蜕变
前端·javascript·react.js
不好听6132 小时前
React vs Vue:两大前端框架技术选型深度对比
前端·vue.js·react.js
GuWenyue2 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue2 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法