import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Item from '../views/Item.vue'
import error from '../views/404.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/', // 路径
name: 'app', // 路径的名称
components: { // 多个 <router-view> 标签设置默认组件
default: Home
} // 路径显示的组件
},
{
path: '/home', // 路径
name: 'home', // 路径的名称
component: Home, // 路径显示的组件
meta: {
requireAuth: true // 判断是否需要路由防卫
},
children: [{ // 定义子组件 例如:/item
path: '/item', // 路径
component: Item // 路径显示的组件
}]
},
{
path: '/404', // 路径
name: 'error', // 路径的名称
component: error // 路径显示的组件
},
{
path: '*', // 判断是否匹配成功,若没有匹配成功,则重定向到404页面
redirect: '/404' // 重定向页面路由
}
]
const router = new VueRouter({
routes
})
// 路由防卫
router.beforeEach((to, from, next) => {
if (to.name != 'error') { // 默认情况下应该是login页面
if (to.meta.requireAuth) { // 判断该路由是否需要安全防卫,可以不设置neta属性,直接判断也可以
if (sessionStorage.getItem('token')) { // 判断本地是否存在token
next() // 如果存在继续执行
} else {
// 如果不存在,则跳到404路由
next({ path: '/404' })
}
} else { // 如果不需要校验
if (sessionStorage.getItem('token')) {
next('/')
} else {
next('/404')
}
}
} else {
next()
}
})
export default router