1、wx.login刷新session_key、token的封装
requestUtil.js
//微信登录————code
function loginCode () {
wx.showLoading();
return new Promise((resolve, reject) => {
wx.login({
success: res1 => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
wx.request({
url: "url",
data: { code: res1.code },
method: "GET",
header: { 'Content-Type': 'application/json' },
success: function (res) {
switch (res.statusCode) {//(根据实际情况判断)
case 200:
wx.setStorageSync('access_token', res.data.result);//把token存储在本地
resolve({ status: 200 });
break;
default:
resolve({ status: res.statusCode });
}
},
fail: function (err) {
wx.showToast({ title: "系统繁忙!", icon: 'error' });
reject();
}
})
},
fail: function (err) {
wx.showToast({ title: "系统繁忙!", icon: 'error' });
reject();
}
})
});
}
module.exports = {
loginCode: loginCode,
}
2、wx.request的封装
request.js
import { loginCode } from './requestUtil'
const app = getApp();
let requestArr = [], isRefreshing = false;//请求队列,是否正在刷新token
// 401 刷新token
function refreshToken (obj, method, content_type, resolve) {
requestArr.push(() => { resolve(httpRequest(obj, method, content_type)) });//缓存请求到队列中
if (!isRefreshing) {
isRefreshing = true;
loginCode().then(res => {
switch (res.status) {//(根据实际情况判断)
case 200:
// 重新请求队列
requestArr.map(MT => { MT(); });
requestArr = [];//清空队列
break;
default:
wx.showToast({ title: "系统繁忙!", icon: 'error' });
}
}).finally(() => {
//解除正在刷新
isRefreshing = false;
wx.hideLoading();
});
}
}
function httpRequest (obj, method, content_type = 'application/json') {
return new Promise((resolve, reject) => {
let token = wx.getStorageSync('access_token');//获取本地的token
wx.request({
url: obj.url,
data: obj.data,
method: method,
header: { 'content-Type': content_type, 'token': token, },
success: (res) => {
switch (res.statusCode) {//(根据实际情况判断)
case 200:
resolve(res.data);
break;
case 401://token过期,刷新token(根据实际情况判断)
refreshToken(obj, method, content_type, resolve);
break;
default:
wx.showToast({ title: "系统繁忙!", icon: 'error' });
reject();
}
},
fail: function (err) {
wx.showToast({ title: "系统繁忙!", icon: 'error' });
reject(err);
}
});
})
}
function _get (obj) {
return httpRequest(obj, 'GET', 'application/json');
}
function _post (obj) {
return httpRequest(obj, 'POST', 'application/json');
}
function _put (obj) {
return httpRequest(obj, 'PUT', 'application/json');
}
function _delete (obj) {
return httpRequest(obj, 'DELETE', 'application/json');
}
module.exports = {
getAction: _get,
postAction: _post,
putAction: _put,
deleteAction: _delete,
}