const router = useRouter()
const testId = (Array.isArray(router.query.testId) ? router.query.testId[0] : router.query.testId) || ""
// ...
const ogImgUrl = useMemo(()=>{
return testId === "food"
? "이미지주소1"
: "이미지주소2"
},[testId])
// ...
<NextSeo
title={pageTitle}
description={ogDescription}
openGraph={{
title: WEBSITE_TITLE,
images: [
{
url: ogImgUrl,
width: 1200,
height: 630,
},
],
}}
/>
www.도메인.com/tests/[testId]
에서 testId 을 읽고, 어떤 테스트인지 파악하는 코드가 "next/router" 의 useRouter 을 이용해서 구현했는데, 이는 브라우저에서의 동작이 필요로 한다www.도메인.com/tests/[testId]
같이 path 값만을 이용할때는 getStaticProps 을 이용하면 되지만,www.도메인.com/tests/[testId]q?=test
같이 search query 를 읽어오기 위해선 getServerSideProps 을 이용해야 한다export const getStaticPaths: GetStaticPaths = () => {
return {
paths: [{params: {testId: "food"}}, {params: {testId: "knowledge"}}],
fallback: true,
};
}
export const getStaticProps: GetStaticProps = (context) => {
const testId = context?.params?.testId || ""
return {
props: {
testId: testId === "food" ? "food" : "knowledge"
},
}
}
또는
export const getServerSideProps: GetServerSideProps = async (context) => {
const testId = context?.params?.testId || ""
const scoreParam = context?.query?.s || ""
const encryptedScore = typeof scoreParam === "string" ? scoreParam : ""
const decryptedScore = encryptedScore ? parseInt(decrypt(encryptedScore), 10) : -1
return {
props: {
testId: testId === "food" ? "food" : "knowledge",
defaultScore: decryptedScore
},
}
}