«Превышен максимальный размер стека вызовов» Маршрутизация VueJS

#node.js #vue.js #routing #vue-router

#node.js #vue.js #маршрутизация #vue-маршрутизатор

Вопрос:

По сути router.beforeEach() , метод делает что-то, чего я не понимаю.

Я понимаю суть проблемы в том, что когда мой маршрут перенаправляется на / login, он будет делать это примерно 960 раз или около того, пока не возникнет ошибка.

мой код выглядит так:

Маршрутизатор:

 let router = new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path:'/login',
      name: 'login',
      component: Login,
      meta: {
        requiresAuth: 'false'
      }
    },
    {
      path:'/register',
      name: 'register',
      component: Register,
      meta: {
        requiresAuth: 'false'
      }
    },
    {
      path: '/',
      name: 'home',
      component: Home,
      meta: {
        requiresAuth: 'True'
      }
    }
  ]
})
  

метод beforeEach()

 router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {

    console.log(to.matched.some(record => record.meta.requiresAuth))
    if (localStorage.getItem('jwt') == null) {
      next({
       path: '/login',
        params: { nextUrl: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    if (localStorage.getItem('jwt') != null) {
      next({
        path: '/',
        params: { nextUrl: '/' }
      })
    } else {
      next()
    }
  }
})
  

Я просмотрел бесчисленное количество потоков и других мест, и ни у кого нет такой же проблемы, как у меня (или я пропускаю вещи). У кого-нибудь есть идея о том, как исправить, и что на самом деле происходит, чтобы ошибка возникла в этом? из того, что я могу сказать, у меня нет ничего, названного дважды, или любая другая функция / компонент запускается, когда этого не должно быть.

Ответ №1:

Исправлено. Я немного особенный в голове. Для тех, у кого такая же проблема, просто измените маршруты на

 routes: [
    {
        path: '/login',
        name: 'login',
        component: Login,
        meta: {
          requiresAuth: false
        }
    },
    {
      path:'/register',
      name: 'register',
      component: Register,
      meta: {
        requiresAuth: false
      }
    },
    {
      path: '/',
      name: 'home',
      component: Home,
      meta: {
        requiresAuth: true
      }
    }
  ]
  

Комментарии:

1. Не могли бы вы еще немного объяснить, что вы сделали? Я не вижу никаких изменений?

2. @dexter, да, в основном метаданные, которые я применяю в каждом маршруте, я устанавливаю значение requiresAuth в виде строки вместо логического значения. И JS возвращает false при ‘true’ == true.

3. Ах, tnx, теперь я это вижу!

Ответ №2:

Для тех, кто получает эту ошибку без какой-либо очевидной ошибки, попробуйте удалить node_modules и запустить npm install снова. Я получил эту ошибку при переключении ветвей git, и единственное, что изменилось, были пакеты, поэтому я попробовал выше, и это избавило от проблемы 🙂