From 3e9a6e1eef3ef518eb9ec948d8a16951b2fb0545 Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Thu, 24 Oct 2024 13:30:49 +0800 Subject: [PATCH] fix: add server-side error log --- .../ClientComponents/ServerOverviewClient.tsx | 7 +++-- app/api/server/route.ts | 8 +++++- lib/serverFetch.tsx | 3 +++ lib/utils.ts | 27 ++++++++++--------- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx b/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx index ebfa63c..764ca38 100644 --- a/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx +++ b/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx @@ -18,13 +18,16 @@ export default function ServerOverviewClient() { ); const disableCartoon = getEnv("NEXT_PUBLIC_DisableCartoon") === "true"; - if (error) + if (error) { return (
-

{error.message}

+

+ Error status:{error.status} {error.info?.cause ?? error.message} +

{t("error_message")}

); + } return ( <> diff --git a/app/api/server/route.ts b/app/api/server/route.ts index 5dc7851..e0cf64e 100644 --- a/app/api/server/route.ts +++ b/app/api/server/route.ts @@ -10,6 +10,7 @@ export const dynamic = "force-dynamic"; interface NezhaDataResponse { error?: string; data?: ServerApi; + cause?: string; } export const GET = auth(async function GET(req) { @@ -19,8 +20,13 @@ export const GET = auth(async function GET(req) { const response = (await GetNezhaData()) as NezhaDataResponse; if (response.error) { - console.log(response.error); return NextResponse.json({ error: response.error }, { status: 400 }); } + if (response.cause) { + return NextResponse.json( + { cause: "server connect error" }, + { status: 400 }, + ); + } return NextResponse.json(response, { status: 200 }); }); diff --git a/lib/serverFetch.tsx b/lib/serverFetch.tsx index 480bd5a..5c2be27 100644 --- a/lib/serverFetch.tsx +++ b/lib/serverFetch.tsx @@ -75,6 +75,7 @@ export async function GetNezhaData() { return data; } catch (error) { + console.error(error); return error; } } @@ -111,6 +112,7 @@ export async function GetServerMonitor({ server_id }: { server_id: number }) { } return monitorData; } catch (error) { + console.error(error); return error; } } @@ -163,6 +165,7 @@ export async function GetServerDetail({ server_id }: { server_id: number }) { return detailData; } catch (error) { + console.error(error); return error; } } diff --git a/lib/utils.ts b/lib/utils.ts index e22f1b1..cd40047 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -71,19 +71,20 @@ export const fetcher = (url: string) => throw err; }); -export const nezhaFetcher = (url: string) => - fetch(url) - .then((res) => { - if (!res.ok) { - throw new Error(res.statusText); - } - return res.json(); - }) - .then((data) => data) - .catch((err) => { - console.error(err); - throw err; - }); +export const nezhaFetcher = async (url: string) => { + const res = await fetch(url); + + if (!res.ok) { + const error = new Error("An error occurred while fetching the data."); + // @ts-ignore + error.info = await res.json(); + // @ts-ignore + error.status = res.status; + throw error; + } + + return res.json(); +}; export function formatRelativeTime(timestamp: number): string { const now = Date.now();