67 lines
1.7 KiB
JavaScript
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
|
|
};
|
|
|