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
|