路由守卫大家应该都不陌生,主要就是两个钩子函数,beforeEach和afterEach,当然还有局部方法,其实同理,就换个名字。如下场景,我们可能很容易导致页面死循环,控制台报错,Uncaught RangeError: Maximum call stack size exceeded。需求:当我们没有登录的时候,跳转到登录页面。如果登录了,则正常跳转。
1 2 3 4 5 6 7 8 | router.beforeEach((to, from, next) => { let token = sessionStorage.getItem('token'); if (token) { next(); } else { next({path: '/login'}) } }); |
当 token 不存在于session中,跳转到/login,此时路由改变,再次进行判断,则又跳转到 /404,由此造成了死循环。在代码中进行一次判断,如果跳到login了,就让它安心的进路由吧。修改后代码如下
1 2 3 4 5 6 7 8 9 10 11 12 | router.beforeEach((to, from, next) => { let token = sessionStorage.getItem('token'); if (token) { next(); } else { if (to.path == '/login') { next(); } else { next({path: '/login'}) } } }); |
下一篇:mpvue项目报错[mpvue-loader] need “fileExt” option in file “build/vue-loader.conf.js”
支付宝扫一扫打赏
微信扫一扫打赏
共 0 条评论关于"vue路由守卫beforeEach死循环Uncaught RangeError: Maximum call stack size exceeded"
最新评论