import Vue from 'vue' import VueRouter from 'vue-router' import Login from '@/views/login' import Register from '@/views/register' import Detail from '@/views/detail' import Layout from '@/views/layout' import Like from '@/views/like' import Article from '@/views/article' import Collect from '@/views/collect' import User from '@/views/user' import { getToken } from '@/utils/storage' Vue.use(VueRouter) const router = new VueRouter({ routes: [ // { path: '/', redirect: '/layout' }, { path: '/', component: Layout, redirect: '/article', children: [ { path: '/article', component: Article }, { path: '/like', component: Like }, { path: '/collect', component: Collect }, { path: '/user', component: User } ] }, { path: '/detail/:id', component: Detail }, { path: '/login', component: Login }, { path: '/register', component: Register } ] }) // 白名单 const whiteList = ['/login'] // 在每一个路由在真正被访问之前,都会经过路由前置导航守卫 // 只有前置守卫放行,才能访问对应的路由 // 每个路由被访问前,都会调用这个函数 // to 往哪去 要去的路由 // from 从哪来 从哪个路由来 // next是否放行 // next() 直接放行 // next(path) 拦截某路由路径 // next(路径) 拦截到某个路径页面 router.beforeEach((to, from, next) => { // 1.判断是否有 token,有就直接放行 // 2.无token,判断是否访问的是白名单页面 const token = getToken() if (token) { next('/login') } else { if (whiteList.includes(to.path)) { next() } else { next('/login') } } }) export default router