路由router.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from './components/Home.vue'
import Dashboard from './components/Dashboard/index.vue'
import Articles from './components/Articles/index.vue'
import Companys from './components/Companys/Companys.vue'
import Subjects from './components/Subjects/Subject.vue'
import directorys from './components/Subjects/directorys.vue'
import tags from './components/Subjects/tags.vue'
import Login from './components/Login.vue'
import Item from './components/Questions/Item.vue'
import quality from './components/Questions/quality.vue'
import check from './components/Questions/check.vue'
import Group from './components/Questions/group.vue'

Vue.use(Router)

const router= new Router({
  routes: [
    {
      path: '/',
      redirect: '/home'
    },
    { path: '/login', component: Login },
    {
      path: '/home', component: Home, children: [
        {path:'/users',component:Dashboard},
        { path: '/articles', component: Articles },
        { path: '/companys', component: Companys },
        { path: '/subjects', component: Subjects },
        { path: '/directorys', component: directorys },
        { path: '/tags', component: tags },
        { path: '/item', component:Item},
        { path: '/quality', component:quality},
        { path: '/check', component:check},
        { path: '/item', component:Item},
        { path: '/group', component:Group}
      ]
    }
  ]
})
router.beforeEach((to, form, next) => {
  // to 跳转对象 to.path 就是地址 打印 有结果
  // from
  // next 放行
  if (to.path === '/login') return next();
  // 获取token
  const tokenSkr = window.sessionStorage.getItem('token');
  if (!tokenSkr) return next('/login')
  return next()
})
export default router
Uncaught (in promise) RangeError: Maximum call stack size exceeded at String.replace (<anonymous>) at encode (vue-router.esm.js:45:6) at eval (vue-router.esm.js:140:16) at Array.map (<anonymous>) at stringifyQuery (vue-router.esm.js:114:8) at getFullPath (vue-router.esm.js:218:26) at createRoute (vue-router.esm.js:172:15) at _createRoute (vue-router.esm.js:1730:12) at Object.match (vue-router.esm.js:1632:12) at VueRouter.match (vue-router.esm.js:2948:23) encode @ vue-router.esm.js:45 eval @ vue-router.esm.js:140 stringifyQuery @ vue-router.esm.js:114 getFullPath @ vue-router.esm.js:218 createRoute @ vue-router.esm.js:172 _createRoute @ vue-router.esm.js:1730 match @ vue-router.esm.js:1632 match @ vue-router.esm.js:2948 transitionTo @ vue-router.esm.js:2259 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095 runQueue @ vue-router.esm.js:2103 confirmTransition @ vue-router.esm.js:2400 transitionTo @ vue-router.esm.js:2268 replace @ vue-router.esm.js:2739 eval @ vue-router.esm.js:2386 eval @ permissions.js:64 iterator @ vue-router.esm.js:2370 step @ vue-router.esm.js:2095了解此错误
最新发布
07-12
### 路由配置导致 Maximum call stack size exceeded 错误的解决方法 在 Vue Router 中,`Maximum call stack size exceeded` 错误通常发生在路由导航逻辑中出现死循环的情况下。例如,在 `beforeEach` 钩子中频繁调用 `next()` 或错误地重定向到自身路径,会导致堆栈溢出并触发该错误。 #### 1. 死循环导致的 Maximum call stack size exceeded 错误 当使用 `router.beforeEach` 进行导航守卫时,如果逻辑处理不当,可能会造成无限循环。例如,在未正确判断目标路径的情况下,连续调用 `next('/login')` 会导致路由不断重定向,从而进入死循环[^3]。以下是可能导致错误的代码示例: ```javascript router.beforeEach((to, from, next) => { if (localStorage.getItem('userInfo')) { if (to.path === '/login') { next({ path: '/' }); } else { next(); } } else { next('/login'); // 如果 /login 页面没有正确处理,则可能进入死循环 } }); ``` 为了避免此问题,应确保在重定向时明确判断当前路径,并避免重复跳转到相同的路径。改进后的代码如下: ```javascript router.beforeEach((to, from, next) => { if (localStorage.getItem('userInfo')) { if (to.path === '/login') { next({ path: '/' }); } else { next(); } } else { if (to.path === '/login') { next(); // 如果已经在登录页,直接放行 } else { next('/login'); // 否则跳转到登录页 } } }); ``` #### 2. 路由重定向配置错误引发的死循环 在某些情况下,路由配置中的 `redirect` 属性也可能导致死循环。例如,当一个路由的 `redirect` 指向自身路径时,Vue Router 会不断尝试匹配和重定向,最终导致堆栈溢出。以下是一个典型的错误配置: ```javascript const routes = [ { path: '/index', component: Home, redirect: '/index', // 错误:重定向指向自身路径 children: [...] } ]; ``` 为了解决这个问题,应删除或修改此类重定向配置,确保每次 `redirect` 都能跳转到一个有效的路径。正确的做法是将其指向其他页面或移除不必要的重定向: ```javascript const routes = [ { path: '/index', component: Home, // redirect: '/index', // 删除这一行以避免死循环 children: [...] } ]; ``` #### 3. 使用 addRoutes 动态添加路由时的潜在问题 当使用 `addRoutes` 方法动态添加路由时,如果新增的路由仍然包含指向自身的 `redirect`,同样会导致死循环。例如,在刷新页面后重新从本地存储加载菜单数据时,若生成的路由配置中仍保留了对 `/index` 的重定向,就会导致堆栈溢出[^4]。解决方案是确保动态添加的路由中不包含无效的重定向规则: ```javascript if (menuData) { store.commit('ADD_MENU', menuData); const routes = mUtils.generateRoutesFromMenu(menuData); const asyncRouterMap = [ { path: '/index', name: '', hidden: true, component: require('./pages/home.vue').default, // redirect: '/index', // 禁止重定向到自身 children: routes } ]; router.addRoutes(asyncRouterMap); } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值