小程序 请求响应拦截器

147 阅读1分钟

` 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

`