封装小程序接口请求函数
封装
js
let onAuthTimeOut = false;
const apiHost = 'http://192.168.31.119:8801';
export const requestPromise = function (
path,
data,
method = 'GET',
needToken = true,
serverErrorWarning = true,
options
) {
return new Promise((resolve, reject) => {
const headers = {};
// 是否需要在请求头上添加token
if (needToken) {
const app = getApp();
headers.token = app.globalData.userInfo?.token;
}
wx.request({
url: `${apiHost}${path}`,
header: {
...headers,
},
method,
data,
success(res) {
const { data, statusCode } = res;
const { status } = data;
if (statusCode === 401 || status === 401) {
// 防止重复触发
if (onAuthTimeOut) {
return false;
} else {
onAuthTimeOut = true;
}
// 清除登录状态
const app = getApp();
wx.clearStorageSync(app.globalData.tokenKey);
app.globalData.userInfo = null;
// 返回初始页
const pages = getCurrentPages();
wx.navigateBack({
delta: pages.length,
});
// 重定向到登录页
wx.redirectTo({
url: '/pages/login/login',
});
// 提示信息
setTimeout(() => {
wx.showToast({
title: '登录已失效,请重新登录',
icon: 'none',
});
// 3s 后再恢复非过期状态
setTimeout(() => {
onAuthTimeOut = false;
}, 3000);
}, 1000);
return false;
}
if (status === 500 && serverErrorWarning) {
setTimeout(() => {
wx.showToast({
title: res.data.message,
icon: 'none',
});
}, 1000);
}
const { status, data, msg } = res.data;
if (status === 200) {
resolve(data);
} else {
reject(new Error(msg));
}
},
fail: (err) => {
reject(new Error(err.errMsg));
},
...options,
});
});
};
使用
js
import { requestPromise } from '../utils/request';
export const getAreaInfo = (data) =>
requestPromise('/api/manager/common/byid', data);
const data = await getAreaInfo({id:1})