const install = (Vue, vm) => { // 是否正在刷新的标记 let isRefreshing = false // 重试队列,每一项将是一个待执行的函数形式 let requests = [] // 请求拦截器 uni.$u.http.interceptors.request.use((config) => { console.log("config==========",config) if(config.data && config.data.tokenType===1){ const HeadShoptoken = vm.$store.state.shopToken if (HeadShoptoken) { config.header['stoken'] = HeadShoptoken; } }else{ const Headtoken = vm.$store.state.token if (Headtoken) { config.header['token'] = Headtoken; } } return config }, config => { return Promise.reject(config) }) // 响应拦截器 uni.$u.http.interceptors.response.use((response) => { // 登录过期 if (response.data.code === 5111) { if (!isRefreshing) { // 是否已经执行刷新 isRefreshing = true uni.login({ provider: 'weixin', success: async function (loginRes) { let { code } = loginRes; uni.request({ url: vm.$baseUrl + 'web/account/wxLogin', method: "GET", data: { code }, success: (res) => { isRefreshing = false vm.$store.commit('setToken', res.data.token) vm.$store.commit('setUserInfo', res.data.member) vm.$store.commit('setOpenId', res.data.member.openId) // 已经刷新了token,将所有队列中的请求进行重试 requests.forEach(item => item(res.data.data)) requests = [] } }); } }); } return new Promise((resolve) => { // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行 requests.push(token => { response.config.header['eva-auth-token'] = token resolve(uni.$u.http.request(response.config)); }) }) } // 接口业务报错 if (response.data.code !== 200) { uni.showToast({ title: response.data.message || response.data.msg, icon: "none", duration: 2000 }); return Promise.reject(response) } return response.data; }, (response) => { return Promise.reject(response) }) } export default { install }