import { config } from '../config.js' import { store } from './store.js' const Method = { GET: 'GET', POST: 'POST' } // 定义一些通用常量 const HTTPConst = { TokenURL: '/api/miniuser/getToken' } class HTTP { constructor() { this.baseUrl = config.api_url } request = (params) => { // 从缓存中读取 token // let token = wx.getStorageSync(HTTPConst.TokenStoreKey) || '' const token = store.readToken() let url = this.baseUrl + params.url //console.log(params.url) if (!params.method) { params.method = Method.GET } // token 拼接到 请求体中 let data = params.data //console.log('请求Header和Body参数:') let header = { 'token': token, 'content-type': 'application/json', } //console.log(header) //console.log(data || {}) wx.request({ url: url, data: data, header: header, method: params.method, dataType: 'json', success: (res) => { //console.log(res.data) let code = res.statusCode.toString() let startCode = code.charAt(0) if (startCode == '2') { if (res.data.code == 200 || res.data.code == 0) { params.success && params.success(res.data) } else if (res.data.code == 302) { // token 无效 this.fetchAuthToken(res => { // 请求Token后,重新请求URL if (res.code == 200) { this.request(params) } }) } else { //console.log('数据请求失败') wx.showToast({ title: res.data.message || '服务器错误,请稍后重试', icon: 'none' }) } } else { //console.log('请求错误') wx.showToast({ title: '服务器错误!', icon: 'none' }) params.error && params.error(res) } }, fail: function (res) { wx.showToast({ title: '网络连接错误,请求稍后重试!', icon: 'none' }) params.fail && params.fail(res) }, }) } // 获取 Token fetchAuthToken (success) { // 获取token this._fetchWXCode().then(res => { //console.log('啦啦啦啦凉啊') //console.log(res) if (!res) return let params = { url: HTTPConst.TokenURL, method: Method.POST, data: { code: res }, success: (data) => { // 将获取到的token存放起来 const { token, userInfo } = data.result store.saveToken(token) store.saveUserInfo(userInfo) success(data) }, } this.request(params) }) } // 获取微信code _fetchWXCode () { return new Promise(resolve => { wx.login({ success (res) { //console.log('获取Code成功 ' + res.code) resolve(res.code) } }) }) } } export { HTTP, Method, HTTPConst }