From dfef7908843162d6a233fdc9e4026b27789f4534 Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Thu, 12 Dec 2024 00:52:19 +0800 Subject: [PATCH] fix: use fs --- app/(main)/server/[id]/page.tsx | 7 +++-- lib/GetIPInfo.ts | 46 ++++++++++++++++++--------------- lib/serverFetch.tsx | 10 +++---- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/app/(main)/server/[id]/page.tsx b/app/(main)/server/[id]/page.tsx index a6b1e07..646b918 100644 --- a/app/(main)/server/[id]/page.tsx +++ b/app/(main)/server/[id]/page.tsx @@ -17,10 +17,9 @@ export default function Page(props: { params: Promise<{ id: string }> }) { const updateViews = async () => { const ipInfo = await GetIPInfo({ server_id: params.id }); console.log(ipInfo); - } - updateViews() - }, []) - + }; + updateViews(); + }, []); return (
diff --git a/lib/GetIPInfo.ts b/lib/GetIPInfo.ts index ea526d4..5b335a9 100644 --- a/lib/GetIPInfo.ts +++ b/lib/GetIPInfo.ts @@ -1,26 +1,30 @@ "use server"; -import maxmind, { CityResponse, AsnResponse } from 'maxmind'; -import { GetServerIP } from './serverFetch'; -import path from 'path'; +import fs from "fs"; +import { AsnResponse, CityResponse, Reader } from "maxmind"; + +import { GetServerIP } from "./serverFetch"; type IPInfo = { - city: CityResponse; - asn: AsnResponse; + city: CityResponse; + asn: AsnResponse; +}; + +export default async function GetIPInfo({ + server_id, +}: { + server_id: string; +}): Promise { + const ip = await GetServerIP({ server_id: Number(server_id) }); + + const cityDbBuffer = fs.readFileSync("./lib/GeoLite2-City.mmdb"); + const asnDbBuffer = fs.readFileSync("./lib/GeoLite2-ASN.mmdb"); + + const cityLookup = new Reader(cityDbBuffer); + const asnLookup = new Reader(asnDbBuffer); + + return { + city: cityLookup.get(ip) as CityResponse, + asn: asnLookup.get(ip) as AsnResponse, + }; } - -export default async function GetIPInfo({ server_id }: { server_id: string }): Promise { - const ip = await GetServerIP({ server_id: Number(server_id) }) - - // 使用 path.join 获取正确的文件路径 - const cityDbPath = path.join(process.cwd(), 'lib', 'GeoLite2-City.mmdb'); - const asnDbPath = path.join(process.cwd(), 'lib', 'GeoLite2-ASN.mmdb'); - - const cityLookup = await maxmind.open(cityDbPath) - const asnLookup = await maxmind.open(asnDbPath) - - return { - city: cityLookup.get(ip) as CityResponse, - asn: asnLookup.get(ip) as AsnResponse - } -} \ No newline at end of file diff --git a/lib/serverFetch.tsx b/lib/serverFetch.tsx index 84ffc9f..e985b3f 100644 --- a/lib/serverFetch.tsx +++ b/lib/serverFetch.tsx @@ -130,8 +130,11 @@ export async function GetServerMonitor({ server_id }: { server_id: number }) { } } - -export async function GetServerIP({ server_id }: { server_id: number }): Promise { +export async function GetServerIP({ + server_id, +}: { + server_id: number; +}): Promise { let nezhaBaseUrl = getEnv("NezhaBaseUrl"); if (!nezhaBaseUrl) { console.error("NezhaBaseUrl is not set"); @@ -176,11 +179,8 @@ export async function GetServerIP({ server_id }: { server_id: number }): Promise console.error("GetNezhaData error:", error); throw error; // Rethrow the error to be caught by the caller } - } - - export async function GetServerDetail({ server_id }: { server_id: number }) { let nezhaBaseUrl = getEnv("NezhaBaseUrl"); if (!nezhaBaseUrl) {