uniapp小程序(请求拦截器和路由拦截器)
1、路由拦截器
let config = {//不需要登录的页面,白名单whiteList: ["/pages/welcome/welcome","/pages/getPhone/getPhone","/pages/invitation_homeAll/invitation_homeAll","/pages/invitation_getPhone/invitation_getPhone",//......],//登录页loginPage: "/pages/getPhone/getPhone"
}
export default function initApp() {/*** 页面跳转拦截器*/let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];list.forEach(item => { //用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器uni.addInterceptor(item, {invoke(e) { // 调用前拦截//获取用户的tokenconst token = uni.getStorageSync('token'),//获取要跳转的页面路径(url去掉"?"和"?"后的参数)url = e.url.split('?')[0];let notNeed = config.whiteList.includes(url)// 如果在whiteList里面就不需要登录if (notNeed) {return e} else {//需要登录if (!token) {uni.navigateTo({url: config.loginPage})return false} else {return e}}},fail(err) { // 失败回调拦截 console.log(err);}})})}
2、请求拦截器
post(url, data, headerValue) {return new Promise((resolve, reject) => {uni.request({url: apiSystem + url,data: data,header: {'content-type': 'application/x-www-form-urlencoded', //自定义请求头信息'token': headerValue},method: 'POST',}).then((response) => {let [error, res] = response;resolve(res);}).catch(error => {let [err, res] = error;reject(err)})//token的请求拦截器uni.addInterceptor('request', {success(args) {if (args.data.code == 500 && args.data.msg == '未找到token对应的用户' || args.data.msg =='header缺失:token') {let pages = getCurrentPages(); //获取所有页面栈实例列表let prevPage = pages[pages.length - 1]; //上一页页面实例console.log('prevPage.$page.fullPath>>' + prevPage.$page.fullPath)//防止多次拦截请求时,多次跳转登录页if (prevPage.$page.fullPath != '/pages/getPhone/getPhone') {uni.navigateTo({url: '/pages/getPhone/getPhone'})return false}}}})})},
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
