gitlab_monitor/service/netTool.ts
zhaoyingbo 71461a04df
All checks were successful
CI Monitor CI/CD / build-image (push) Successful in 28s
CI Monitor CI/CD / deploy (push) Successful in 28s
feat: 更新GitLab API调用方法
2024-07-01 12:33:40 +00:00

99 lines
2.3 KiB
TypeScript

interface NetGetParams {
url: string;
method: string;
params?: any;
data?: any;
headers?: any;
}
/**
* 打印请求日志
* @param response
* @param method
* @param data
*/
const logResponse = async (
response: Response,
method: string,
data: any,
headers: any
) => {
let responseData = null;
try {
responseData = await response.json();
} catch (error) {
responseData = "parse to json error";
}
const responseLog = {
ok: response.ok,
status: response.status,
statusText: response.statusText,
url: response.url,
method: method,
requestHeaders: headers,
responseHeaders: response.headers,
requestBody: data,
responseBody: responseData as any,
};
console.log("🚀 ~ responseLog:", JSON.stringify(responseLog, null, 2));
return responseLog;
};
const netTool = <T = any>({
url,
method,
params,
data,
headers,
}: NetGetParams): Promise<T> => {
let fullUrl = url;
if (params) {
if (typeof params === "string") {
fullUrl = `${url}?${params}`;
} else {
const queryString = new URLSearchParams(params).toString();
fullUrl = `${url}?${queryString}`;
}
}
return fetch(fullUrl, {
method,
body: JSON.stringify(data),
headers: {
"Content-Type": "application/json",
...headers,
},
})
.then((response) => logResponse(response, method, data, headers))
.then((responseLog) => {
if (!responseLog.ok) {
if (responseLog?.responseBody?.msg) {
throw new Error(responseLog.responseBody.msg);
}
throw new Error("网络响应异常");
}
if (responseLog.responseBody === "parse to json error") {
throw new Error("解析响应数据异常");
}
return responseLog.responseBody as T;
});
};
netTool.get = <T = any>(url: string, params?: any, headers?: any): Promise<T> =>
netTool({ url, method: "get", params, headers });
netTool.post = <T = any>(
url: string,
data?: any,
params?: any,
headers?: any
): Promise<T> => netTool({ url, method: "post", data, params, headers });
netTool.del = <T = any>(url: string, data: any, headers?: any): Promise<T> =>
netTool({ url, method: "delete", data, headers });
netTool.patch = <T = any>(url: string, data: any, headers?: any): Promise<T> =>
netTool({ url, method: "patch", data, headers });
export default netTool;