99 lines
2.3 KiB
TypeScript
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;
|