家谱现有接口调试50%
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
(function (root, factory) {
|
||||
// 请求工具封装 URL、Header 和响应解包,业务路径由 api-client 统一提供。
|
||||
if (typeof module === 'object' && module.exports) {
|
||||
module.exports = factory(root);
|
||||
return;
|
||||
}
|
||||
|
||||
root.RequestUtil = factory(root);
|
||||
})(typeof globalThis !== 'undefined' ? globalThis : window, function (root) {
|
||||
'use strict';
|
||||
|
||||
function trimSlashes(value) {
|
||||
return String(value || '').replace(/^\/+|\/+$/g, '');
|
||||
}
|
||||
|
||||
function joinUrl(baseUrl, path) {
|
||||
var base = String(baseUrl || '').replace(/\/+$/g, '');
|
||||
var cleanPath = '/' + trimSlashes(path);
|
||||
return base + cleanPath;
|
||||
}
|
||||
|
||||
function appendQuery(url, query) {
|
||||
if (!query) return url;
|
||||
|
||||
var params = new URLSearchParams();
|
||||
Object.keys(query).forEach(function (key) {
|
||||
var value = query[key];
|
||||
if (value === undefined || value === null || value === '') return;
|
||||
params.append(key, value);
|
||||
});
|
||||
|
||||
var queryText = params.toString();
|
||||
return queryText ? url + '?' + queryText : url;
|
||||
}
|
||||
|
||||
function isFormData(body) {
|
||||
return typeof FormData !== 'undefined' && body instanceof FormData;
|
||||
}
|
||||
|
||||
function createHttpError(message, detail) {
|
||||
var error = new Error(message);
|
||||
Object.keys(detail || {}).forEach(function (key) {
|
||||
error[key] = detail[key];
|
||||
});
|
||||
return error;
|
||||
}
|
||||
|
||||
async function parseJson(response) {
|
||||
try {
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function unwrapResponse(payload) {
|
||||
if (!payload || typeof payload !== 'object') return payload;
|
||||
|
||||
if (payload.code !== undefined && payload.code !== 200) {
|
||||
throw createHttpError(payload.msg || '接口请求失败', {
|
||||
code: payload.code,
|
||||
response: payload
|
||||
});
|
||||
}
|
||||
|
||||
if (Object.prototype.hasOwnProperty.call(payload, 'data')) return payload.data;
|
||||
if (Object.prototype.hasOwnProperty.call(payload, 'rows')) {
|
||||
return {
|
||||
rows: payload.rows,
|
||||
total: payload.total
|
||||
};
|
||||
}
|
||||
|
||||
return payload;
|
||||
}
|
||||
|
||||
function createRequester(options) {
|
||||
var settings = options || {};
|
||||
var fetchImpl = settings.fetchImpl || root.fetch;
|
||||
|
||||
return async function request(method, path, requestOptions) {
|
||||
var req = requestOptions || {};
|
||||
var headers = Object.assign({}, req.headers || {});
|
||||
var token = settings.getToken ? settings.getToken() : '';
|
||||
var tokenHeaderName = settings.tokenHeaderName || 'Authorization';
|
||||
var url = appendQuery(joinUrl(settings.baseUrl, path), req.query);
|
||||
var body = req.body;
|
||||
|
||||
headers.clientid = settings.clientId;
|
||||
if (token && req.auth !== false) headers[tokenHeaderName] = 'Bearer ' + token;
|
||||
|
||||
if (body !== undefined && body !== null && !isFormData(body)) {
|
||||
headers['Content-Type'] = headers['Content-Type'] || 'application/json';
|
||||
body = JSON.stringify(body);
|
||||
}
|
||||
|
||||
var response = await fetchImpl(url, {
|
||||
method: method,
|
||||
headers: headers,
|
||||
body: body
|
||||
});
|
||||
var payload = await parseJson(response);
|
||||
|
||||
if (!response.ok) {
|
||||
throw createHttpError((payload && payload.msg) || '接口请求失败', {
|
||||
status: response.status,
|
||||
response: payload
|
||||
});
|
||||
}
|
||||
|
||||
return unwrapResponse(payload);
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
createRequester: createRequester,
|
||||
joinUrl: joinUrl,
|
||||
appendQuery: appendQuery
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user