RangeError: Maximum call stack size exceeded调试找错

过程

最近在用uniapp写一个项目,路由这一方面用的uni-simple-router组件,使用该组件可以用类似vue-router的方式完成路由拦截等操作,但是在初步使用过程中报了RangeError: Maximum call stack size exceeded这样的错误,栈超限了,初步判断可能是路由跳转太多,初始代码如下:

router.beforeEach((to, from, next) => {
  //   console.log(1)
  //   console.log(to)
  
    if (!uni.getStorageSync("token")) {
      console.log(2)
      next({
        name: "Login",
        NAVTYPE: "push",
      })
    }
  } else next()
})

即当无token时,自动跳转到登录界面。
但是在加载登录页的时候,会打印出上百个2,并出现报错。
在这里插入图片描述

后来我取消next中的传参(因为已经初步判断是if中出现了问题),发现报错消失,得因此得出结论:
当加载登陆页面时,触发路由守卫判断无token,便会继续进入登录界面,陷入了死循环,超过内存时,产生错误。
因此要再加一层判断,只有当跳转到非Login界面时,才会触发路由守卫

router.beforeEach((to, from, next) => {
  //   console.log(1)
  //   console.log(to)
  if (to.path != "/pages/login/login") {
    if (!uni.getStorageSync("token")) {
      console.log(2)
      next({
        name: "Login",
        NAVTYPE: "push",
      })
    } else {
      next()
    }
  } else next()
})

报错消失。

总结

在产生报错时,要耐心的一步步去查找错误的原因,可以通过打印和修改一些参数等辅助手段(也就是控制变量法)一步步的确定出错的原因,最后修改,然后总结经验教训。

安装

uni-simple-router安装时采用的npm方式,初始uniapp项目没有npm模块,使用 命令行 npm init -y初始化

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值