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 };