判断token是否存在,根据是否存在进行放行
/ 前置路由守卫
const whiteList = ['/login', '/404']
router.beforeEach((to, from, next) => {
const token = Cookies.get('token')
// 如果存在 token
if (token) {
if (to.path === '/login') {
// 如果存在 token,访问的是登录页面,直接跳转到主页
next('/')
} else {
// 如果存在 token,访问的是其他页面,直接放行
next()
}
} else {
// 如果不存在 token,访问的是白名单内容,直接放行
if (whiteList.includes(to.path)) {
next()
} else {
// 没有 token,且不是白名单页面,跳转到登录页面
next('/login')
}
}
})
/ 拦截器
instance.interceptors.request.use(config => {
const token = Cookies.get('token') as string;
if (token) {
if (config && config.headers) {
config.headers = config.headers || {}
config.headers.Authorization = `Bearer ${token}` as string;
}
}
return config;
}, err => {
return Promise.reject(err);
})
instance.interceptors.response.use(response => {
if (response.data.success) {
return response.data
} else {
return Promise.reject(new Error(response.data.message))
}
}, error => {
// 软件工程:程序健壮性,做多层的校验
if (error.response && error.response.data && error.response.data.code === 10002) {
// 当等于 10002 的时候,表示后端告诉我 token 超时了
// 登出action 删除token
Cookies.remove('token');
} else {
ElMessage.error(error.message) // 提示错误信息
}
// 对响应错误做点什么
return Promise.reject(error)
})
export default instance;