wx.request的封装
2022年11月15日
let CONSTANT = require('../api/constant')
// 从本地存储Storage中获取token值
function getAccessToken() {
return wx.getStorageSync(CONSTANT.ACCESSTOKEN);
}
function getXAccessToken() {
return wx.getStorageSync(CONSTANT.XCCESSTOKEN);
}
// 创建请求头header的内容
function buildHeaders(isJson) {
let headers = {
"Content-Type": isJson ? 'application/json' : "application/x-www-form-urlencoded",
"version": CONSTANT.MINI_VERSION,
};
const accessToken = getAccessToken();
if (accessToken) {
headers['Authorization'] = `Bearer ${accessToken}`;
}
return headers;
}
// wx.getNetworkType判断网路类型。eg:wifi、2g、3g...;none值表示无网路
function fetchApi(url, params, method, isJson) {
wx.getNetworkType({
success: function (res) {
console.info(res);
// &&表示“并”"none" === e.networkType如果为真,才会去执行&&后面的内容,否则不执行
"none" === res.networkType && (wx.hideLoading(), wx.showModal({
title: "提示",
content: "当前无网络,请检查网络设置后重新加载",
showCancel: false
}));
}
});
return new Promise((resolve, reject) => {
wx.request({
url: `${CONSTANT.API_IP}${url}`,
method: method,
header: buildHeaders(isJson),
data: params,
success: function (res) {
// 并重新请求获取token值
if (401 == res.statusCode) {
wx.login({
success: res => {
console.info(' wx.login', res.code);
wx.request({
url: CONSTANT.API_IP + "/Weixin/WxOpen/OnLogin",
method: "GET",
header: {
"version": CONSTANT.MINI_VERSION,
"Content-Type": 'application/json',
},
data: {
code: res.code,
},
success: function (res) {
console.info('WxOpen/OnLogin', res);
wx.removeStorageSync(CONSTANT.ACCESSTOKEN);
wx.removeStorageSync(CONSTANT.XCCESSTOKEN);
wx.removeStorageSync(CONSTANT.SESSIONID);
// 读取Header 内容
if (200 === res.statusCode) {
wx.setStorageSync(CONSTANT.ACCESSTOKEN, res.header[CONSTANT.ACCESSTOKEN]);
wx.setStorageSync(CONSTANT.XCCESSTOKEN, res.header[CONSTANT.XCCESSTOKEN]);
wx.setStorageSync(CONSTANT.SESSIONID, res.data.data);
console.log("already refresh token", res.data.data);
console.info('SESSIONID', wx.getStorageSync(CONSTANT.SESSIONID));
console.log("SESSIONID", res.data.data);
fetchApi(url, params, method, isJson).then(c => {
console.info('fetchApi', c);
resolve(c);
});
}
}
});
}
});
}
// 41020003表示未授权了直接跳转到授权页(请求授权获取用户信息)
else if (403 == res.statusCode) {
wx.reLaunch({
url: "/pages/personal/login"
});
}
else if (404 == res.statusCode) {
}
else {
if (res.header[CONSTANT.ACCESSTOKEN]) {
console.info(res.header);
wx.removeStorageSync(CONSTANT.ACCESSTOKEN);
wx.removeStorageSync(CONSTANT.XCCESSTOKEN);
wx.setStorageSync(CONSTANT.ACCESSTOKEN, res.header[CONSTANT.ACCESSTOKEN]);
wx.setStorageSync(CONSTANT.XCCESSTOKEN, res.header[CONSTANT.XCCESSTOKEN]);
}
console.info('resolve', res.data);
resolve(res.data);
}
},
fail: function (res) {
reject(res.data);
console.log("network fail.", res);
wx.showModal({
title: "系统提示",
content: "请检查网络:" + JSON.stringify(res),
showCancel: false
})
},
complete: function (res) {
// resolve(res.data);
// console.log('complete', res);
}
});
});
};
module.exports = {
fetchApi,
// 定义各种api的方法
// fetchApi(url, params, method, isJson) {
// return fetchApi(url, params, method, isJson);
// }
}