diff --git a/service/netTool.ts b/service/netTool.ts index 8c494af..5ae9f5e 100644 --- a/service/netTool.ts +++ b/service/netTool.ts @@ -1,29 +1,27 @@ -interface NetGetParams { +interface NetRequestParams { url: string; method: string; - params?: any; - data?: any; - headers?: any; + queryParams?: any; + payload?: any; + additionalHeaders?: any; } /** - * 打印请求日志 - * @param response - * @param method - * @param data + * 记录响应详情并返回响应日志对象。 + * @param response - 响应对象。 + * @param method - 请求使用的HTTP方法。 + * @param headers - 请求头。 + * @param requestBody - 请求体。 + * @param responseBody - 响应体。 + * @returns 响应日志对象。 */ -const logResponse = async ( +const logResponse = ( response: Response, method: string, - data: any, - headers: any + headers: any, + requestBody: any, + responseBody: any ) => { - let responseData = null; - try { - responseData = await response.json(); - } catch (error) { - responseData = "parse to json error"; - } const responseLog = { ok: response.ok, status: response.status, @@ -32,70 +30,156 @@ const logResponse = async ( method: method, requestHeaders: headers, responseHeaders: response.headers, - requestBody: data, - responseBody: responseData as any, + requestBody, + responseBody, }; console.log("🚀 ~ responseLog:", JSON.stringify(responseLog, null, 2)); return responseLog; }; -const netTool = ({ +/** + * 发送网络请求并返回一个解析为响应数据的Promise。 + * @param url - 要发送请求的URL。 + * @param method - 请求使用的HTTP方法。 + * @param queryParams - 要包含在URL中的查询参数。 + * @param payload - 请求的有效负载数据。 + * @param additionalHeaders - 要包含在请求中的附加头。 + * @returns 一个解析为响应数据的Promise。 + * @throws 如果网络响应不成功或存在解析错误,则抛出错误。 + */ +const netTool = async ({ url, method, - params, - data, - headers, -}: NetGetParams): Promise => { + queryParams, + payload, + additionalHeaders, +}: NetRequestParams): Promise => { + // 拼接完整的URL let fullUrl = url; - if (params) { - if (typeof params === "string") { - fullUrl = `${url}?${params}`; + if (queryParams) { + if (typeof queryParams === "string") { + fullUrl = `${url}?${queryParams}`; } else { - const queryString = new URLSearchParams(params).toString(); - fullUrl = `${url}?${queryString}`; + const queryString = new URLSearchParams(queryParams).toString(); + if (queryString) fullUrl = `${url}?${queryString}`; } } - return fetch(fullUrl, { + // 设置请求头 + const headers = { + "Content-Type": "application/json", + ...additionalHeaders, + }; + + // 发送请求 + const res = await 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; - }); + 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; }; -netTool.get = (url: string, params?: any, headers?: any): Promise => - netTool({ url, method: "get", params, headers }); +/** + * 发送GET请求并返回一个解析为响应数据的Promise。 + * + * @param url - 要发送请求的URL。 + * @param queryParams - 要包含在URL中的查询参数。 + * @param additionalHeaders - 要包含在请求中的附加头。 + * @returns 一个解析为响应数据的Promise。 + */ +netTool.get = ( + url: string, + queryParams?: any, + additionalHeaders?: any +): Promise => + netTool({ url, method: "get", queryParams, additionalHeaders }); +/** + * 发送POST请求并返回一个解析为响应数据的Promise。 + * + * @param url - 要发送请求的URL。 + * @param payload - 请求的有效负载数据。 + * @param queryParams - 要包含在URL中的查询参数。 + * @param additionalHeaders - 要包含在请求中的附加头。 + * @returns 一个解析为响应数据的Promise。 + */ netTool.post = ( url: string, - data?: any, - params?: any, - headers?: any -): Promise => netTool({ url, method: "post", data, params, headers }); + payload?: any, + queryParams?: any, + additionalHeaders?: any +): Promise => + netTool({ url, method: "post", payload, queryParams, additionalHeaders }); -netTool.put = (url: string, data: any, headers?: any): Promise => - netTool({ url, method: "put", data, headers }); +/** + * 发送PUT请求并返回一个解析为响应数据的Promise。 + * + * @param url - 要发送请求的URL。 + * @param payload - 请求的有效负载数据。 + * @param queryParams - 要包含在URL中的查询参数。 + * @param additionalHeaders - 要包含在请求中的附加头。 + * @returns 一个解析为响应数据的Promise。 + */ +netTool.put = ( + url: string, + payload: any, + queryParams?: any, + additionalHeaders?: any +): Promise => + netTool({ url, method: "put", payload, queryParams, additionalHeaders }); -netTool.del = (url: string, data: any, headers?: any): Promise => - netTool({ url, method: "delete", data, headers }); +/** + * 发送DELETE请求并返回一个解析为响应数据的Promise。 + * + * @param url - 要发送请求的URL。 + * @param payload - 请求的有效负载数据。 + * @param queryParams - 要包含在URL中的查询参数。 + * @param additionalHeaders - 要包含在请求中的附加头。 + * @returns 一个解析为响应数据的Promise。 + */ +netTool.del = ( + url: string, + payload: any, + queryParams?: any, + additionalHeaders?: any +): Promise => + netTool({ url, method: "delete", payload, queryParams, additionalHeaders }); -netTool.patch = (url: string, data: any, headers?: any): Promise => - netTool({ url, method: "patch", data, headers }); +/** + * 发送PATCH请求并返回一个解析为响应数据的Promise。 + * + * @param url - 要发送请求的URL。 + * @param payload - 请求的有效负载数据。 + * @param queryParams - 要包含在URL中的查询参数。 + * @param additionalHeaders - 要包含在请求中的附加头。 + * @returns 一个解析为响应数据的Promise。 + */ +netTool.patch = ( + url: string, + payload: any, + queryParams?: any, + additionalHeaders?: any +): Promise => + netTool({ url, method: "patch", payload, queryParams, additionalHeaders }); export default netTool; diff --git a/service/sendMessage.ts b/service/sendMessage.ts index f97a155..c81bc4b 100644 --- a/service/sendMessage.ts +++ b/service/sendMessage.ts @@ -5,7 +5,10 @@ const API_KEY = "1dfz4wlpbbgiky0"; const sendMessage = async (body: any) => { const URL = "https://egg.imoaix.cn/message"; try { - const res = await netTool.post(URL, body); + const res = await netTool.post(URL, { + api_key: API_KEY, + ...body, + }); return res; } catch { return null; @@ -14,7 +17,6 @@ const sendMessage = async (body: any) => { sendMessage.byGroupId = async (group_id: string, content: string) => { return sendMessage({ - api_key: API_KEY, group_id, msg_type: "interactive", content, @@ -23,7 +25,6 @@ sendMessage.byGroupId = async (group_id: string, content: string) => { sendMessage.byChatId = async (chat_id: string, content: string) => { return sendMessage({ - api_key: API_KEY, receive_id: chat_id, receive_id_type: "chat_id", msg_type: "interactive",