gitlab_monitor/service/netTool.ts
zhaoyingbo 153f15d839
All checks were successful
CI Monitor CI/CD / build-image (push) Successful in 30s
CI Monitor CI/CD / deploy (push) Successful in 37s
feat: 更新网络请求工具函数
2024-07-12 07:42:34 +00:00

186 lines
5.1 KiB
TypeScript

interface NetRequestParams {
url: string;
method: string;
queryParams?: any;
payload?: any;
additionalHeaders?: any;
}
/**
* 记录响应详情并返回响应日志对象。
* @param response - 响应对象。
* @param method - 请求使用的HTTP方法。
* @param headers - 请求头。
* @param requestBody - 请求体。
* @param responseBody - 响应体。
* @returns 响应日志对象。
*/
const logResponse = (
response: Response,
method: string,
headers: any,
requestBody: any,
responseBody: any
) => {
const responseLog = {
ok: response.ok,
status: response.status,
statusText: response.statusText,
url: response.url,
method: method,
requestHeaders: headers,
responseHeaders: response.headers,
requestBody,
responseBody,
};
console.log("🚀 ~ responseLog:", JSON.stringify(responseLog, null, 2));
return responseLog;
};
/**
* 发送网络请求并返回一个解析为响应数据的Promise。
* @param url - 要发送请求的URL。
* @param method - 请求使用的HTTP方法。
* @param queryParams - 要包含在URL中的查询参数。
* @param payload - 请求的有效负载数据。
* @param additionalHeaders - 要包含在请求中的附加头。
* @returns 一个解析为响应数据的Promise。
* @throws 如果网络响应不成功或存在解析错误,则抛出错误。
*/
const netTool = async <T = any>({
url,
method,
queryParams,
payload,
additionalHeaders,
}: NetRequestParams): Promise<T> => {
// 拼接完整的URL
let fullUrl = url;
if (queryParams) {
if (typeof queryParams === "string") {
fullUrl = `${url}?${queryParams}`;
} else {
const queryString = new URLSearchParams(queryParams).toString();
if (queryString) fullUrl = `${url}?${queryString}`;
}
}
// 设置请求头
const headers = {
"Content-Type": "application/json",
...additionalHeaders,
};
// 发送请求
const res = await fetch(fullUrl, {
method,
body: JSON.stringify(payload),
headers,
});
// 获取响应数据
let resData: any = null;
try {
resData = await res.json();
} catch (error) {
resData = "解析为JSON时出错";
}
// 记录响应
logResponse(res, method, headers, payload, resData);
if (!res.ok) {
if (resData?.msg) {
throw new Error(resData.msg);
}
throw new Error("网络响应异常");
}
if (resData === "解析为JSON时出错") {
throw new Error("解析响应数据异常");
}
return resData as T;
};
/**
* 发送GET请求并返回一个解析为响应数据的Promise。
*
* @param url - 要发送请求的URL。
* @param queryParams - 要包含在URL中的查询参数。
* @param additionalHeaders - 要包含在请求中的附加头。
* @returns 一个解析为响应数据的Promise。
*/
netTool.get = <T = any>(
url: string,
queryParams?: any,
additionalHeaders?: any
): Promise<T> =>
netTool({ url, method: "get", queryParams, additionalHeaders });
/**
* 发送POST请求并返回一个解析为响应数据的Promise。
*
* @param url - 要发送请求的URL。
* @param payload - 请求的有效负载数据。
* @param queryParams - 要包含在URL中的查询参数。
* @param additionalHeaders - 要包含在请求中的附加头。
* @returns 一个解析为响应数据的Promise。
*/
netTool.post = <T = any>(
url: string,
payload?: any,
queryParams?: any,
additionalHeaders?: any
): Promise<T> =>
netTool({ url, method: "post", payload, queryParams, additionalHeaders });
/**
* 发送PUT请求并返回一个解析为响应数据的Promise。
*
* @param url - 要发送请求的URL。
* @param payload - 请求的有效负载数据。
* @param queryParams - 要包含在URL中的查询参数。
* @param additionalHeaders - 要包含在请求中的附加头。
* @returns 一个解析为响应数据的Promise。
*/
netTool.put = <T = any>(
url: string,
payload: any,
queryParams?: any,
additionalHeaders?: any
): Promise<T> =>
netTool({ url, method: "put", payload, queryParams, additionalHeaders });
/**
* 发送DELETE请求并返回一个解析为响应数据的Promise。
*
* @param url - 要发送请求的URL。
* @param payload - 请求的有效负载数据。
* @param queryParams - 要包含在URL中的查询参数。
* @param additionalHeaders - 要包含在请求中的附加头。
* @returns 一个解析为响应数据的Promise。
*/
netTool.del = <T = any>(
url: string,
payload: any,
queryParams?: any,
additionalHeaders?: any
): Promise<T> =>
netTool({ url, method: "delete", payload, queryParams, additionalHeaders });
/**
* 发送PATCH请求并返回一个解析为响应数据的Promise。
*
* @param url - 要发送请求的URL。
* @param payload - 请求的有效负载数据。
* @param queryParams - 要包含在URL中的查询参数。
* @param additionalHeaders - 要包含在请求中的附加头。
* @returns 一个解析为响应数据的Promise。
*/
netTool.patch = <T = any>(
url: string,
payload: any,
queryParams?: any,
additionalHeaders?: any
): Promise<T> =>
netTool({ url, method: "patch", payload, queryParams, additionalHeaders });
export default netTool;