Next.js 정적 페이지에서 쿼리 매개변수 및 쿠키 사용
9296 단어 nextjsssgtutorialjavascript
정적 페이지는 비차단 방식으로 구축됩니다.
이로 인해 개발자는 요청 컨텍스트에 의존하는 기본 빌드 페이지를 만들 수 없습니다. 예를 들어 로그인한 사용자, 재방문자, 지리적 위치 등에 대해 페이지 디자인이 다른 경우 클라이언트에서 해당 요소를 렌더링해야 하지만 해결책이 있습니다.
구조에 대한 Next.js Edge 미들웨어
Next.js에서 제공하는 미들웨어의 도움으로 사용자의 요청 시작과 완료 중간에 실행되는 함수를 작성할 수 있습니다. 이렇게 하면 사용자의 요청을 처리하고 필요한 경우 정적 페이지에 다시 작성할 수 있습니다.
따라서 우리의 경우에는 다음과 같이 다시 작성하고 싶습니다.
GET http://example.com/my-page
에게
GET http://example.com/my-page/{{path}}
여기서
path
는 정적 페이지를 정확하게 렌더링하는 데 필요한 다양한 옵션의 결정적 문자열 표현입니다.따라서 미들웨어를 사용하여 요청 컨텍스트에서 인코딩합니다. 지리적 위치, 재방문자 쿠키, 쿼리 매개변수 등이 있습니다. 그리고 다른 쪽 끝에서는 정적 경로 처리기가 그것을 디코딩하도록 할 것입니다.
예를 들어 사용자가 재방문자인지 여부, 국가를 가져오고 페이지를 가져오는 데
encodeOptions
를 사용할 수 있습니다.// middleware.js file
import { NextResponse } from 'next/server'
import { encodeOptions } from '../utils';
export default function middleware(request) {
if (request.nextUrl.pathname === '/my-page') {
const searchParams = request.nextUrl.searchParams
const path = encodeOptions({
returnVisitor: Boolean(request.cookies.get('visitor')),
country: request.geo?.country,
page: searchParams.get('page'),
})
return NextResponse.rewrite(new URL(`/my-page/${path}`, request.nextUrl))
}
return NextResponse.next()
}
그런 다음 정적 경로 처리기에서 다음 옵션을 디코딩할 수 있습니다.
// /pages/my-page/[path].jsx file
import { decodeOptions } from '../../utils'
export async function getStaticProps({
params,
} {
const options = decodeOptions(params.path)
return {
props: {
options,
}
}
}
export function getStaticPaths() {
return {
paths: [],
fallback: true
}
}
export default function MyPath({ options }) {
return <MyPage
isReturnVisitor={options.returnVisitor}
country={options.coutnry} />
}
이제
JSON.stringify
를 사용하는 것처럼 기본적인 인코딩/디코딩 기능을 구현할 수 있습니다. 그러나 우리는 그것보다 더 잘할 수 있습니다. 개체에서 결정적 문자열을 생성하는 라이브러리를 사용합시다.npm install fast-json-stable-stringify
이 스니펫에서와 같이 사용하십시오.
// utils.js
// https://github.com/epoberezkin/fast-json-stable-stringify
import stringify from 'fast-json-stable-stringify'
export function encodeOptions(options) {
const json = stringify(options)
return encodeURI(json);
}
export function decodeOptions(path) {
return JSON.parse(decodeURI(path));
}
결론
Next.js 미들웨어를 SSG/ISR 페이지와 결합하면 매우 강력하며 다음과 같은 다양한 사용 사례가 열립니다.
request.geo
또는 Accept-Language
헤더를 확인하여 지리적 위치를 기준으로 콘텐츠를 자동으로 현지화합니다. request.headers.get('host')
를 보고 호스팅 도메인을 기반으로 사이트의 테마를 변경합니다. 동일한 기술을 사용하여 Builder.io에서 고성능 A/B 테스트 및 콘텐츠 개인화를 제공하는 방법에 대한 자세한 내용은 A/B Testing and Personalization with Next.js Edge Middleware을 확인하십시오.
Reference
이 문제에 관하여(Next.js 정적 페이지에서 쿼리 매개변수 및 쿠키 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/teleaziz/using-query-params-and-cookies-in-nextjs-static-pages-kbb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)