| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- (function () {
- 'use strict';
- var DEFAULT_ERROR_MESSAGE = 'Request failed';
- function getErrorMessage(result) {
- if (result && (typeof result.message === 'string' || typeof result.message === 'number')) {
- return String(result.message);
- }
- if (result && (typeof result.msg === 'string' || typeof result.msg === 'number')) {
- return String(result.msg);
- }
- return DEFAULT_ERROR_MESSAGE;
- }
- function isSuccessCode(code) {
- return code === 0 || code === 200 || code === '0' || code === '200';
- }
- function parseResponse(response) {
- return response.json().catch(function () {
- return { code: -1, message: DEFAULT_ERROR_MESSAGE };
- });
- }
- /**
- * 通用 API 请求封装,统一错误处理
- * @param {string} url 请求地址
- * @param {Object} [options] fetch 选项
- * @returns {Promise<any>} 成功时返回 data / result / 响应体
- */
- function request(url, options) {
- var fetchOptions = Object.assign({ credentials: 'include' }, options || {});
- return fetch(url, fetchOptions)
- .then(function (response) {
- return parseResponse(response).then(function (result) {
- var code = result && result.code;
- if (!response.ok || !isSuccessCode(code)) {
- var err = new Error(getErrorMessage(result));
- err.code = code != null ? code : (response.status || -1);
- err.status = response.status;
- err.data = result;
- throw err;
- }
- return result && (result.data !== undefined ? result.data : result.result !== undefined ? result.result : result);
- });
- })
- .catch(function (err) {
- if (err && err.message) {
- throw err;
- }
- var fallback = new Error(DEFAULT_ERROR_MESSAGE);
- fallback.code = -1;
- throw fallback;
- });
- }
- /**
- * 带鉴权头的请求,自动注入当前 token
- * @param {string} url 请求地址
- * @param {Object} [options] fetch 选项
- * @param {string} [token] 可选 token,默认使用 window.WELFARE_TOKEN
- * @returns {Promise<any>}
- */
- function requestWithAuth(url, options, token) {
- var authToken = token != null ? token : (window.WELFARE_TOKEN || '');
- var headers = Object.assign({}, options && options.headers);
- if (authToken) {
- headers.Authorization = authToken;
- }
- return request(url, Object.assign({}, options, { headers: headers }));
- }
- window.BEXApi = {
- request: request,
- requestWithAuth: requestWithAuth,
- isSuccessCode: isSuccessCode,
- getErrorMessage: getErrorMessage
- };
- })();
|