问题记录:Error: Redirected from "/" to "{}" via a navigation guard

649 阅读1分钟

问题详情

Error: Redirected from "/" to "{}" via a navigation guard. at createRouterError (webpack-internal:///./node_modules/vue-router/dist/vue-router.mjs:926:19) at next (webpack-internal:///./node_modules/vue-router/dist/vue-router.mjs:2249:16) at eval (webpack-internal:///./node_modules/vue-router/dist/vue-router.mjs:2303:28) at eval (webpack-internal:///./src/router/index.js:34:12) at eval (webpack-internal:///./node_modules/vue-router/dist/vue-router.mjs:2266:31) at new Promise () at eval (webpack-internal:///./node_modules/vue-router/dist/vue-router.mjs:2237:16) at eval (webpack-internal:///./node_modules/vue-router/dist/vue-router.mjs:3917:63)

中文解释:你从路径 A 又跳转到路径 A,有毛病?我不乐意了,报个错你自己看吧。

解决办法

  1. vue-router 版本降级,但是需要注意 vue 和 vue-router 的版本对应。(其它伙伴的解决方案,我试了下 vue3 用3.X的 router 会导致版本不对应,失败。)

  2. 尝试了其他办法,成功避免了错误。

  • 修改前:
 router.beforeEach((to, from, next) => {
  console.log(from.path + '->' + to.path)
  const isLogin = false
  if (isLogin || to.name === 'Login') {
    return next()
  } else {
    return next({ name: 'Login' })
  }
}) 

  • 修改后:
router.beforeEach((to, from, next) => {
  console.log(from.path + '->' + to.path)
  const isLogin = false
  if (isLogin || to.name === 'Login') {
    return next()
  } else {
    router.push('/login')
    return next()
  }
})