import Request from 'luch-request' // let baseURL = 'http://192.168.1.91:2888' let baseURL = 'http://192.168.1.168:2888' let tokenUrl = baseURL + "/blade-auth/oauth/token?tenantId=000000&password=21232f297a57a5a743894a0e4a801fc3&username=admin" //获取token const getTokenStorage = () => { let token = '' try { token = uni.getStorageSync('token') } catch (e) {} return token } const http = new Request() http.setConfig((config) => { /* 设置全局配置 */ config.baseURL = baseURL /* 根域名不同 */ config.header = { ...config.header, } return config }) http.interceptors.request.use((config) => { /* 请求之前拦截器。可以使用async await 做异步操作 */ config.header = { ...config.header, "Blade-Auth": getTokenStorage() } return config }, (config) => { return Promise.reject(config) }) // 是否正在刷新的标记 let isRefreshing = false // 重试队列,每一项将是一个待执行的函数形式 let requests = [] http.interceptors.response.use(async (response) => { /* 请求之后拦截器。可以使用async await 做异步操作 */ //toekn过期处理 //200 返回数据成功 0 return response; }, async (err) => { // 请求错误做点什么 console.log(err,1234123); if (err.statusCode == 401) { let { config } = err if (!isRefreshing) { isRefreshing = true let token = uni.getStorageSync('token') let [,res] = await uni.request({ url: tokenUrl, method: 'POST', header: { Authorization: "Basic c2FiZXI6c2FiZXJfc2VjcmV0" }, }) //否则保存新的token token = res.data.token_type + " " + res.data.access_token uni.setStorageSync('token', token) requests.forEach(cb => cb()) // 重试完了清空这个队列 requests = [] isRefreshing = false return await http.request(config) } else { return new Promise((resolve) => { // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行 requests.push(() => { resolve(http.request(config)) }) }) } }else{ return err.data } return Promise.reject(err) }) export { http }