uni.addInterceptor('request', { invoke(args) { // request 触发前拼接 url const { data, method, } = args; if (method === "GET") { // 如果是get请求,且params是数组类型如arr=[1,2],则转换成arr=1&arr=2 const newData = qs.stringify(data, { arrayFormat: "repeat" }) delete args.data; args.url = `${args.url}?${newData}`; } }, success(args) {}, fail(err) {}, complete(res) {} }) import config from "./config.js" 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) { // 调用前拦截 //获取用户的token const token = uni.getStorageSync('uni_id_token'), //token是否已失效 tokenExpired = uni.getStorageSync('uni_id_token_expired') < Date.now(), //获取要跳转的页面路径(url去掉"?"和"?"后的参数) url = e.url.split('?')[0]; let notNeed = config.whiteList.includes(url) // 如果在whiteList里面就不需要登录 if (notNeed) { return e } else { //需要登录 if (token == '' || tokenExpired) { uni.showToast({ title: '请先登录', icon: 'none' }) uni.navigateTo({ url: config.loginPage }) return false }else{ return e } } }, fail(err) { // 失败回调拦截 console.log(err); if (Debug) { console.log(err); uni.showModal({ content: JSON.stringify(err), showCancel: false }); } } }) }) //添加uniCloud云函数拦截器 }