NextRequest
NextRequest는 Web Request API를 추가적인 편의 메서드로 확장합니다.
cookies
요청의 Set-Cookie
헤더를 읽거나 변경합니다.
set(name, value)
주어진 이름으로 요청에 주어진 값의 쿠키를 설정합니다.
// 들어오는 요청 /home이 주어졌을 때
// 배너를 숨기기 위해 쿠키 설정
// 요청은 `Set-Cookie:show-banner=false;path=/home` 헤더를 가질 것입니다
request.cookies.set("show-banner", "false");
get(name)
쿠키 이름이 주어지면 쿠키의 값을 반환합니다. 쿠키를 찾을 수 없으면 undefined
가 반환됩니다. 여러 쿠키가 발견되면 첫 번째 쿠키가 반환됩니다.
// 들어오는 요청 /home이 주어졌을 때
// { name: 'show-banner', value: 'false', Path: '/home' }
request.cookies.get("show-banner");
getAll()
쿠키 이름이 주어지면 쿠키의 값들을 반환합니다. 이름이 주어지지 않으면 요청의 모든 쿠키를 반환합니다.
// 들어오는 요청 /home이 주어졌을 때
// [
// { name: 'experiments', value: 'new-pricing-page', Path: '/home' },
// { name: 'experiments', value: 'winter-launch', Path: '/home' },
// ]
request.cookies.getAll("experiments");
// 또는 요청의 모든 쿠키 가져오기
request.cookies.getAll();
delete(name)
쿠키 이름이 주어지면 요청에서 해당 쿠키를 삭제합니다.
// 삭제되면 true를 반환하고, 아무것도 삭제되지 않으면 false를 반환합니다
request.cookies.delete("experiments");
has(name)
쿠키 이름이 주어지면 요청에 쿠키가 존재하는 경우 true
를 반환합니다.
// 쿠키가 존재하면 true를 반환하고, 존재하지 않으면 false를 반환합니다
request.cookies.has("experiments");
clear()
요청에서 Set-Cookie
헤더를 제거합니다.
request.cookies.clear();
nextUrl
네이티브 URL
API를 Next.js 특정 속성을 포함한 추가적인 편의 메서드로 확장합니다.
// /home에 대한 요청이 주어졌을 때, pathname은 /home입니다
request.nextUrl.pathname;
// /home?name=lee에 대한 요청이 주어졌을 때, searchParams는 { 'name': 'lee' }입니다
request.nextUrl.searchParams;
다음 옵션을 사용할 수 있습니다:
속성 | 타입 | 설명 |
---|---|---|
basePath | string | URL의 기본 경로입니다. |
buildId | string | undefined | Next.js 애플리케이션의 빌드 식별자입니다. 사용자 정의할 수 있습니다. |
pathname | string | URL의 경로명입니다. |
searchParams | Object | URL의 검색 매개변수입니다. |
참고: Pages 라우터의 국제화 속성은 App 라우터에서 사용할 수 없습니다. App 라우터를 사용한 국제화에 대해 자세히 알아보세요.
ip
ip
속성은 요청의 IP 주소를 포함하는 문자열입니다. 이 값은 선택적으로 호스팅 플랫폼에서 제공할 수 있습니다.
알아두면 좋은 점: Vercel에서는 이 값이 기본적으로 제공됩니다. 다른 플랫폼에서는
X-Forwarded-For
헤더를 사용하여 IP 주소를 제공할 수 있습니다.
// Vercel에서 제공됨
request.ip;
// 자체 호스팅
request.headers.get("X-Forwarded-For");
geo
geo
속성은 요청의 지리적 정보를 포함하는 객체입니다. 이 값은 선택적으로 호스팅 플랫폼에서 제공할 수 있습니다.
알아두면 좋은 점: Vercel에서는 이 값이 기본적으로 제공됩니다. 다른 플랫폼에서는
X-Forwarded-For
헤더를 사용하여 IP 주소를 제공한 다음, 써드파티 서비스를 사용하여 지리적 정보를 조회할 수 있습니다.
// Vercel에서 제공됨
request.geo.city;
request.geo.country;
request.geo.region;
request.geo.latitude;
request.geo.longitude;
// 자체 호스팅
function getGeo(request) {
let ip = request.headers.get("X-Forwarded-For");
// 써드파티 서비스를 사용하여 지리적 정보 조회
}