详解给Vue2路由导航钩子和axios拦截器做个封装
1.写在前面最近在学习Vue2,遇到有些页面请求数据需要用户登录权限、服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文。 2.具体需求
3.简单实现3.1 路由导航钩子层面鉴权与重定向的封装 路由导航钩子所有配置均在router/index.js,这里是部分代码 const MyAddress = r => require.ensure([],() => r(require('@/views/MyAddress/MyAddress')),'MyAddress')
Vue.use(Router) const routes = [ const router = new Router({ 我们主要来看下面逻辑处理部分的代码 {
// 路由进入下一个路由对象前,判断是否需要登陆
// 在路由meta对象中由个requireAuth字段,只要此字段为true,必须做鉴权处理
if (to.matched.some(res => res.meta.requireAuth)) {
// userData为存储在本地的一些用户信息
let userData = getUserData()
// 未登录和已经登录的处理
// getUserData方法处理后如果userData.token没有值就是undefined,下面直接判断
if (userData.token === undefined) {
// 执行到此处说明没有登录,君可按需处理之后再执行如下方法去登录页面
// 我这里没有其他处理,直接去了登录页面
next({
path: '/login',query: {
redirect: to.path
}
})
} else {
// 执行到说明本地存储有用户信息
// 但是用户信息是否过期还是需要验证一下滴
let overdueTime = userData.overdueTime
let nowTime = +new Date
// 登陆过期和未过期
if (nowTime > overdueTime) {
// 登录过期的处理,君可按需处理之后再执行如下方法去登录页面
// 我这里没有其他处理,直接去了登录页面
next({
path: '/login',query: {
redirect: to.path
}
})
} else {
next()
}
}
} else {
next()
}
if (to.path !== '/') {
indexScrollTop = document.body.scrollTop
}
document.title = to.meta.title || document.title
})
router.afterEach(route => { 至此,路由钩子层面的鉴权处理完毕,不过细心的你可能注意到:导航去登录页面调用的next方法里面有个query对象,携带了目标路由的地址,这是因为在登录成功后我们需要重定向到目标页面。 3.2 对axios拦截器封装 axios所有配置均在件script/getData.js文件,这里是本文件公共代码部分 import qs from 'qs'
import { getUserData } from '@/script/localUserData ' import router from '@/router ' import axios from 'axios' import { AJAX_URL } from '@/config/index ' axios.defaults.baseURL = AJAX_URL
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 无法从Xcode 4.2升级到4.2.1
- 02.13.2005 单一北航打球日记
- c# – 保存到SQL Server时附加的文件前缀为文件
- c# – 在打印文档时设置打印选项
- Oracle-RAC等价性验证错误:Result: PRVF-4007 : User equi
- ORA-08002: 序列 SEQ1.CURRVAL 尚未在此会话中定义
- 关于React Native中FlatList的onEndReached属性频繁调用的一
- Vue项目页面跳转时,窗口上方显示进度条
- c# – 如何控制.Net在名称空间冲突中选择哪个程序集?
- oracle10g – Oracle 10g和11g的索引优化和更新统计信息的命