This commit is contained in:
hailin 2025-05-21 15:02:30 +08:00
parent 3bf9df89dd
commit f31df7fbc8
1 changed files with 33 additions and 4 deletions

View File

@ -28,6 +28,26 @@ interface RootLayoutProps {
} }
} }
// 新增的 `getValidSupabaseUrl` 函数,带有超时机制和错误处理
async function getValidSupabaseUrl(): Promise<string> {
let url = getRuntimeEnv("SUPABASE_URL");
const timeout = Date.now() + 30000; // 设置最大等待时间为30秒
while (!url || !url.includes(":")) { // 检查是否包含合法的 IP 和端口
if (Date.now() > timeout) {
throw new Error("获取有效的 Supabase URL 超时");
}
console.log("等待有效的 Supabase URL...");
await new Promise(resolve => setTimeout(resolve, 1000)); // 每1秒检查一次
url = getRuntimeEnv("SUPABASE_URL");
}
return url;
}
export async function generateMetadata({ export async function generateMetadata({
params: { locale } params: { locale }
}: { }: {
@ -93,9 +113,20 @@ export default async function RootLayout({
console.log(`🍪 Cookie: ${cookie.name} = ${cookie.value}`); console.log(`🍪 Cookie: ${cookie.name} = ${cookie.value}`);
} }
const supabaseUrl = getRuntimeEnv("SUPABASE_URL"); // const supabaseUrl = getRuntimeEnv("SUPABASE_URL");
console.log("=================>Server's Supabase URL: ", supabaseUrl); // console.log("==========>Supabase URL: ", supabaseUrl);
let supabaseUrl = "";
try {
// 等待直到获取到有效的 Supabase URL
supabaseUrl = await getValidSupabaseUrl();
console.log("获取到有效的 Supabase URL: ", supabaseUrl);
} catch (error) {
console.error("Supabase URL 获取失败:", error);
return <div> Supabase </div>; // 出现错误时返回一个友好的提示
}
// const supabase = createServerClient<Database>( // const supabase = createServerClient<Database>(
// getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", // getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000",
// process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, // process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
@ -119,8 +150,6 @@ export default async function RootLayout({
const { t, resources } = await initTranslations(locale, i18nNamespaces) const { t, resources } = await initTranslations(locale, i18nNamespaces)
//console.log("[layout.tsx]..............current locale: ", {locale});
return ( return (
<html lang="en" suppressHydrationWarning> <html lang="en" suppressHydrationWarning>