2026-03-30 18:08:27 +08:00

67 lines
1.7 KiB
JavaScript

const { getBaseUrl } = require('./constants');
function withAuthHeader(needAuth, header) {
const app = getApp();
if (!needAuth) return header;
const token = app && app.globalData ? app.globalData.accessToken : '';
if (typeof token === 'string' && token.length > 0) {
header = header || {};
header.Authorization = `Bearer ${token}`;
}
return header;
}
function normalizeError(payload) {
if (!payload) return new Error('Empty response');
// RESTfulResult usually has `errors` and/or `message`
if (typeof payload === 'string') return new Error(payload);
if (payload.errors) return new Error(payload.errors.toString());
if (payload.message) return new Error(payload.message);
return new Error(JSON.stringify(payload));
}
function request({
path,
method = 'GET',
data = {},
needAuth = false,
contentType = 'application/json'
}) {
const baseUrl = getBaseUrl();
const url = `${baseUrl}${path}`;
const header = withAuthHeader(needAuth, {
'content-type': contentType
});
return new Promise((resolve, reject) => {
wx.request({
url,
method: method.toUpperCase(),
data: method.toUpperCase() === 'GET' ? data : data,
header: header,
success(res) {
const payload = res && res.data !== undefined ? res.data : null;
// Most backend uses RESTfulResult wrapper
if (payload && typeof payload === 'object' && typeof payload.succeeded === 'boolean') {
if (payload.succeeded) resolve(payload.data);
else reject(normalizeError(payload));
return;
}
// Fallback
resolve(payload);
},
fail(err) {
reject(err);
}
});
});
}
module.exports = {
request
};