import { notFound } from "next/navigation"; import { headers } from "next/headers"; import { HeroBanner } from "@/app/components/HeroBanner"; // 서버 전용 페이지: params가 Promise일 수 있어 안전 언랩 후 절대 URL로 fetch합니다. export default async function PostDetail({ params }: { params: any }) { const p = params?.then ? await params : params; const id = p.id as string; // slug 값이 들어옴 const h = await headers(); const host = h.get("host") ?? "localhost:3000"; const proto = h.get("x-forwarded-proto") ?? "http"; const base = process.env.NEXT_PUBLIC_BASE_URL || `${proto}://${host}`; const res = await fetch(new URL(`/api/posts/${id}`, base).toString(), { cache: "no-store" }); if (!res.ok) return notFound(); const { post } = await res.json(); const createdAt = post?.createdAt ? new Date(post.createdAt) : null; return (
{/* 상단 배너 */}
{/* 본문 카드 */}

{post.title}

{createdAt && (

{createdAt.toLocaleString()}

)}
{post.content}
); }