` import http from 'wechat-http' http.baseURL = 'live-api.itheima.net'
// 请求拦截器 http.intercept.request = (options) => { // 指定默认的头信息 const defaultHeader = {} // 权限认证 defaultHeader.Authorization = 'Bearer ' + getApp().token // 合并头信息 options.header = Object.assign({}, defaultHeader, options.header) // 拦截器处理后的请求参数 return options }
// 响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
// console.log(statusCode) // http 响应状态码
const app = getApp()
if (data.code === 401) {
// refreshToken 失效
// 请求的地址
// console.log(config.url);
// config.url
if (config.url.includes('/refreshToken')) {
const pagestack = getCurrentPages()
const currentPage = pagestack.pop()
const url = currentPage.route
// 判断是否是tabBar的地址过来的
const res = wx.util.ifTabBar(url)
// console.log(url)
// tabBar过来的地址也可以跳转了
const isPath = res ? 'switchTab' : 'redirectTo'
return wx.redirectTo({ url: /pages/login/index?url=/${url}&urlType=${isPath} })
}
// token失效
const { code, data } = await http({
url: '/refreshToken',
method: 'POST',
header: { Authorization: 'Bearer ' + app.refreshToken },
})
if (code !== 10000) return wx.util.toast('更新token失败')
app.setStorageToken('token', data.token)
app.setStorageToken('refreshToken', data.refreshToken)
// 发起请求时的参数
config = Object.assign(config, {
header: { Authorization: 'Bearer ' + app.refreshToken },
})
// return http(config)
return
}
// 拦截器处理后的响应结果
return data
}
// 挂载到 wx 全局命名空间 wx.http = http
`