refactor: error state

This commit is contained in:
hamster1963 2024-09-26 18:07:52 +08:00
parent 14b9cad856
commit ec5dc2742a
4 changed files with 34 additions and 20 deletions

View File

@ -1,6 +1,5 @@
NezhaBaseUrl=http://1.1.1.1:8008 NezhaBaseUrl=http://124.XX.XX.XX:8008
NezhaAuth=nezha-token NezhaAuth=your-nezha-api-token
ServerDisablePrefetch=false NEXT_PUBLIC_NezhaFetchInterval=5000
NEXT_PUBLIC_NezhaFetchInterval=2000
NEXT_PUBLIC_ShowFlag=true NEXT_PUBLIC_ShowFlag=true
NEXT_PUBLIC_DisableCartoon=false NEXT_PUBLIC_DisableCartoon=true

View File

@ -6,9 +6,18 @@ import { nezhaFetcher } from "../../../../lib/utils";
import useSWR from "swr"; import useSWR from "swr";
import getEnv from "../../../../lib/env-entry"; import getEnv from "../../../../lib/env-entry";
export default function ServerListClient() { export default function ServerListClient() {
const { data } = useSWR<ServerApi>("/api/server", nezhaFetcher, { const { data, error } = useSWR<ServerApi>("/api/server", nezhaFetcher, {
refreshInterval: Number(getEnv("NEXT_PUBLIC_NezhaFetchInterval")) || 2000, refreshInterval: Number(getEnv("NEXT_PUBLIC_NezhaFetchInterval")) || 2000,
}); });
if (error)
return (
<div className="flex flex-col items-center justify-center">
<p className="text-sm font-medium opacity-40">{error.message}</p>
<p className="text-sm font-medium opacity-40">
Please check your environment variables and review the server console logs for more details.
</p>
</div>
);
if (!data) return null; if (!data) return null;
const sortedServers = data.result.sort((a, b) => { const sortedServers = data.result.sort((a, b) => {
if (a.display_index && b.display_index) { if (a.display_index && b.display_index) {

View File

@ -8,17 +8,19 @@ export const dynamic = "force-dynamic";
export const runtime = 'edge'; export const runtime = 'edge';
interface NezhaDataResponse {
error?: string;
data?: ServerApi;
}
export async function GET(_: Request) { export async function GET(_: Request) {
try { const response = (await GetNezhaData()) as NezhaDataResponse;
const response = await GetNezhaData(); if (response.error) {
return NextResponse.json(response, { status: 200 }); console.log(response.error);
} catch (error) { return NextResponse.json({ error: response.error }, { status: 400 });
console.error(error);
return NextResponse.json(
{ error: "fetch nezha data failed" },
{ status: 400 },
);
} }
return NextResponse.json(response, { status: 200 });
} }
async function GetNezhaData() { async function GetNezhaData() {
@ -26,7 +28,7 @@ async function GetNezhaData() {
var nezhaBaseUrl = getEnv("NezhaBaseUrl"); var nezhaBaseUrl = getEnv("NezhaBaseUrl");
if (!nezhaBaseUrl) { if (!nezhaBaseUrl) {
console.log("NezhaBaseUrl is not set"); console.log("NezhaBaseUrl is not set");
return; return { error: "NezhaBaseUrl is not set" };
} }
// Remove trailing slash // Remove trailing slash
@ -42,7 +44,12 @@ async function GetNezhaData() {
revalidate: 0, revalidate: 0,
}, },
}); });
const nezhaData = (await response.json()).result as NezhaAPI[]; const resData = await response.json();
const nezhaData = resData.result as NezhaAPI[];
if (!nezhaData) {
console.log(resData);
return { error: "NezhaData fetch failed" };
}
const data: ServerApi = { const data: ServerApi = {
live_servers: 0, live_servers: 0,
offline_servers: 0, offline_servers: 0,

View File

@ -1,6 +1,5 @@
NezhaBaseUrl=http://0.0.0.0:8008 NezhaBaseUrl=http://124.XX.XX.XX:8008
NezhaAuth=5hAY3QX6Nl9B3UOQgB26KdsdS1dsdUdM NezhaAuth=your-nezha-api-token
ServerDisablePrefetch=false
NEXT_PUBLIC_NezhaFetchInterval=5000 NEXT_PUBLIC_NezhaFetchInterval=5000
NEXT_PUBLIC_ShowFlag=true NEXT_PUBLIC_ShowFlag=true
NEXT_PUBLIC_DisableCartoon=true NEXT_PUBLIC_DisableCartoon=true