해결된 질문
작성
·
51
0
안녕하세요! 언제나 멋진 강의 감사드립니다.
다름이 아니라, 프로젝트를 Vercel에 배포하는 과정에서 아래와 같은 컴파일 실패 에러가 빌드 로그에서 검출되어서 이에 대해 여쭤보고 싶습니다.
화면 상에서는
src/app/(with-searchbar)/search/page.tsx
에 선언한 generateMetaData 함수가 Next.js 페이지의 요구조건을 충족시키지 못한다라는 내용으로 보여지는데요, 이런 경우에는 해당 요소에서 어떤 부분을 확인해볼 수 있을까요?
해당 페이지에 대한 코드도 함께 첨부해 드리겠습니다.
\app\(with-searchbar)\search\page.tsx
import BookItem from "@/components/book-item";
import BookListSkeleton from "@/components/skeleton/book-list-skeleton";
import { BookData } from "@/types";
import { delay } from "@/util/delay";
import { Metadata } from "next";
import { Suspense } from "react";
//index 페이지와 다르게 search 페이지는 QueryString과 같은 동적인 값에 의존하고 있기 때문에 static 페이지로는 설정할 수 없지만, 데이터 캐시를 최대한 이용하는 것으로 최적화
async function SearchResult({q}:{q:string}) {
await delay(2000);
const response = await fetch(
`${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/search?q=${q}`,
{cache: "force-cache"}
);
if(!response.ok){
return <div>오류가 발생했습니다 ...</div>
}
const books: BookData[] = await response.json();
return (
<div>
{books.map((book) => (
<BookItem key={book.id} {...book} />
))}
</div>
);
}
//현재 페이지의 메타데이터를 동적으로 생성하는 함수
export async function generateMetaData({
searchParams,
}: {
searchParams: Promise<{q?: string}>;
}): Promise<Metadata> {
const {q} = await searchParams;
return {
title: `${q} : 검색 결과`,
description : `검색어 ${q}의 검색 결과입니다`,
openGraph: {
title: `${q} : 검색 결과`,
description : `검색어 ${q}의 검색 결과입니다`,
images: ["/thumbnail.png"],
}
}
}
export default async function Page({
searchParams,
}: {
searchParams: Promise<{ q: string }>;
}) {
const {q} = await searchParams;
return (
<Suspense key={q || ""} fallback={<BookListSkeleton count={3} />}>
<SearchResult q={q ||""} />
</Suspense>);
}
답변 2
0
안녕하세요 이정환입니다.
함수 이름에 오타가있습니다. MetaData가 아닌 Metadata로 작성해주셔야 합니다 😃
generateMetaData
-> generateMetadata
0
안녕하세요, 인프런 AI 인턴입니다. dhj8011님.
Vercel에 배포하는 과정에서 발생하는 generateMetaData
관련 문제는 주로 Next.js의 특정 필드가 올바르게 사용되지 않은 경우 발생할 수 있습니다. Next.js의 전역 설정 및 페이지 설정에서 generateMetaData
와 같은 커스텀 기능을 사용할 때, 올바른 키 값과 로직이 중요합니다.
타입 및 인터페이스 확인:
generateMetaData
함수에서 사용하는 searchParams
타입이 Promise<{ q?: string }>
로 올바르게 설정되어 있는지 확인하세요. 이는 서버 컴포넌트에서 비동기 데이터를 처리할 때 필요합니다.메타데이터 생성 시점 문제:
generateMetaData
함수가 제대로 호출되고 있는지 확인해야 합니다. 문제가 있을 경우, 해당 함수의 호출 위치와 조건을 점검하세요.Next.js 버전 및 설정 확인:
Vercel 및 로깅 확인:
아래는 비슷한 문제에 대한 기존 답변 링크입니다:
- checkFields, ‘default’>>() 에러?
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
역시 생각외로 별거 아닌 부분도 꼼꼼히 봐야 하는 이유네요... 감사드립니다!