caught (in promise) RangeError: Maximum call stack size exceeded-vue前置导航守卫死循环

news2024/12/26 7:22:44

报错图

 

产生场景

1.近期在搭建移动端的架子时,在写路由守卫时,发现陷入死循环,报错意思是循环超出栈。。

2.后面排查了一圈问题之后,发现这个问题很小,但很难发现,在此记录。

3.vue 路由的导航守卫并不是执行一次,而是一直执行知道放行为止--很重要

4.next ()和 next('/login')区别

4.1 next ()表示路由成功进行,直接进入to的路由地址(路由控制去哪就去哪)

4.2 next('/login')表示路由拦截成功,重定向至/login,并且还会再次调用router.beforeEach();

4.3 beforeEach()必须调用next()才会放行,否则就会出现无限循环(报错出现)

解决方案

permission.js文件-最下面else重点

在判断没有token,重定向到login(登录页时候)加一个判断如果to.path去login就放行,代码如下

// 引入vuex
import store from '@/store'
import router from './router'
// 所有的路由进入前都会经过该守卫  路由之前触发
router.beforeEach(async (to, from, next) => {
  // 打印 to 属性打印信息里面有meta路又元标识
  // console.log(to);
  // 这里是用来判断 路由取得页面如果有needLogin这个属性就要登录 反之放行
  // 这里引入 vuex
  // 判断如果vuex token 里面有值就放行到要去页面 反之就放心到登录页获取token
  if (store.getters.token) {
    if (store.getters.userInfo.id) {
      next()
    } else {
      // 简化代码 本来在页面里面调用接口 现在在这里调用 只用写一次
      // 顺便验证token 如果有用户信息 那token就一定有效 token 401错误已经处理
      await store.dispatch('getUserInfo')
      next()
    }
    // next()
  } else {
    // 跳转登录页时告诉登录页要会跳的页面
    // 路由传参 传 this.$store.push('/xxx/?参数名=值')
    console.log('to', to)
     if (to.path === '/login') {
      next()
     } else {
       next('/login?back=' + to.fullPath)
     }
  }
})

扩展

1.PC端也是有这个情况的,为什么没有遇到了,是以为我们在使用vue-element-admin等模板时候,它帮我们处理了,就是白名单,原理是一样的,判断是不是去这些页面在在放行一次。

 

自己理解

总的来说导航守卫会根据条件一直执行知道被next()出去,如果只有next('login')(重定向)就会陷入死循环下面有图片例子

 

总结:


经过这一趟流程下来相信你也对 caught (in promise) RangeError: Maximum call stack size exceeded-vue前置导航守卫死循环 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/606037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类和对象【4】static成员、const对象、友元

全文目录 引言static成员static成员变量static成员函数 const对象友元友元函数友元类 总结 引言 通过前面的三篇文章,相信大家对类和对象已经有了一个基本的认识。 类和对象1(初识) 类和对象2(默认成员函数) 类和对象…

数据结构与算法11:堆

目录 【堆】 堆中插入和删除元素 堆排序 【堆的常见应用】 应用1:优先级队列 (1)合并有序小文件 (2)定时器功能 应用2:计算排行榜中前K个数据 应用3:求中位数 应用4:计算…

算法基础--MD5算法介绍

1、简介 MD5再开发过程中经常碰到的一种算法,因此感觉有必要对其原理进行更深入的了解一下。 2、算法概念 散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数&#x…

自然语言处理从入门到应用——自然语言处理的应用任务

分类目录:《自然语言处理从入门到应用》总目录 本文介绍信息抽取、情感分析、问答系统、机器翻译和对话系统等自然语言处理应用任务。这些任务可以直接或间接地以产品的形式为终端用户提供服务,是自然语言处理研究应用落地的主要技术。 信息抽取 信息抽…

天气预报信息获取程序--GUI--可以使用

上次正对项目中需要填写项目日志,制作了一个命令行版本的下载天气信息的程序,满足日常需要,调整一下界面版本的程序 如果大家使用命令行的可以使用下面的版本(连接) https://ht666666.blog.csdn.net/article/details…

逻辑漏洞学习-知识点总结

逻辑漏洞就是程序在实现业务逻辑上存在的错误,辑漏洞的出现通常是因为程序在设计业务逻辑时考虑不够全面,或者程序员的思维过程存在瑕疵,没有充分考虑到各种可能的情况 大部分程序员在设计的时候,目标是实现功能需求,…

Linux基础知识点 有这篇就足够了!!

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 目录 一、 从认识操作系统开始 1.1 操作系统简介 1.2 操作系统…

chatgpt赋能Python-python分表

介绍 Python是一种流行的编程语言,适用于各种应用程序开发,包括网络应用程序、数据库应用程序以及数据分析和科学计算。Python分表是基于Python编写的分表工具,可以帮助开发人员更轻松地管理大型数据库表格。 Python分表是如何工作的&#…

0219-810

3GPP TS 02.19 V8.1.0 (2005-06) 前言 本技术规范由第三代合作伙伴计划 (3GPP) 制定。 本文件的内容取决于 TSG 的持续工作,并可能在 TSG 正式批准后发生变化。 如果 TSG 修改本文档的内容,TSG 将重新发布 确定发布日期的变化和版本号的增加如下&…

低代码开发平台选择指南:如何选出最适合企业的低代码平台?

低代码平台的兴起改变了公司处理软件开发的方式。这些平台使组织能够快速高效地构建应用程序,该应用程序可以利用预设组件和开箱功能。但是,因为有这么多低代码平台可以使用,所以为你的组织选择合适的平台可能是一个挑战。本文将探索如何低代…

FreeRTOS任务切换

PendSV异常 SVC 用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户…

(字符串 ) 459. 重复的子字符串——【Leetcode每日一题】

❓459. 重复的子字符串 难度:简单 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 3: 输入: s “…

IDEA+Mysql调试常见异常解决办法_kaic

IDEA导入项目出现Error: java: 程序包javax.servlet.http不存在错误的解决办法 解决方法:打开File>Project Structure>Libraries,点击右侧加号,寻找到tomcat的lib文件夹,点击ok,IDEA会自动重新Rebuild Project&…

数据结构 | 图的深度优先遍历和广度优先遍历(C语言)

一、数据结构定义 1、图 #define MaxVertexNum 100 // 最大可存储的节点数目/*图*/ typedef char VexterType; typedef int EdgeType;typedef struct GraphMatrix {VexterType Vexs[MaxVertexNum]; //结点 EdgeType Edges[MaxVertexNum][MaxVertexNum]; //边int vexnum, a…

使用 MCSM 面板一键搭建我的世界服务器,并内网穿透公网远程联机

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 转载自远程穿透文章&…

【AI】Stable-Diffusion-WebUI使用指南

注:csdn对图片有审核,审核还很奇葩,线稿都能违规,为保证完整的阅读体验建议移步至个人博客阅读 最近AI绘画实现了真人照片级绘画水准,导致AI绘画大火,公司也让我研究研究,借此机会正好了解一下…

图像处理:GrapeCity Documents Imaging 6.1.2 Crack

适用于 .NET 6 的快速、强大的映像 API 库,在代码中应用高级图像处理,零依赖关系。 加载和保存图像文件,如BMP,JPEG,TIFF,GIF,ICO,SVG,WebP和PNG 对灰度和 RGB 图像应用抖动和阈值等…

Ribbon 负载均衡策略 —— 图解、源码级解析

文章目录 负载均衡策略RandomRuleRoundRobinRuleRetryRuleWeightedResponseTimeRuleBestAvailableRuleAvailabilityFilteringRuleZoneAvoidanceRule Ribbon 负载均衡策略源码RandomRule源码RoundRobinRule源码BestAvailableRule源码RetryRule源码 通过本文你可以学习到&#xf…

自学大语言模型之BERT

BERT 模型由 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova在BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding中提出。它是一种双向变换器,使用掩码语言建模目标和对包含多伦多图书语料库和维基百科的大型语…

开源高星精选,10个2023企业级Python测试项目,再不学习时间就没了

纸上得来终觉浅,光学习理论知识是不够的。 想要学好软件测试必须要结合实战项目深入掌握,今天给大家分享十个2022最新企业级Python软件测试项目: ​ 添加图片注释,不超过 140 字(可选) ▌Rank 1&#xf…