NextRequest

NextRequest 擴展了 Web Request API,並提供了額外的便利方法。

cookies

讀取或修改請求中的 Set-Cookie 標頭。

set(name, value)

根據給定的名稱,在請求中設定一個具有指定值的 cookie。

// 假設傳入的請求是 /home
// 設定一個 cookie 來隱藏橫幅
// 請求將包含 `Set-Cookie:show-banner=false;path=/home` 標頭
request.cookies.set('show-banner', 'false')

get(name)

根據 cookie 名稱,返回該 cookie 的值。如果找不到 cookie,則返回 undefined。如果找到多個 cookie,則返回第一個。

// 假設傳入的請求是 /home
// { name: 'show-banner', value: 'false', Path: '/home' }
request.cookies.get('show-banner')

getAll()

根據 cookie 名稱,返回該 cookie 的所有值。如果未提供名稱,則返回請求中的所有 cookie。

// 假設傳入的請求是 /home
// [
//   { name: 'experiments', value: 'new-pricing-page', Path: '/home' },
//   { name: 'experiments', value: 'winter-launch', Path: '/home' },
// ]
request.cookies.getAll('experiments')
// 或者,取得請求中的所有 cookie
request.cookies.getAll()

delete(name)

根據 cookie 名稱,從請求中刪除該 cookie。

// 如果刪除成功返回 true,如果沒有刪除任何內容則返回 false
request.cookies.delete('experiments')

has(name)

根據 cookie 名稱,如果請求中存在該 cookie 則返回 true

// 如果 cookie 存在返回 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

以下選項可用:

屬性類型描述
basePathstringURL 的 基礎路徑
buildIdstring | undefinedNext.js 應用程式的建置識別碼。可 自訂
pathnamestringURL 的路徑名稱。
searchParamsObjectURL 的查詢參數。

注意: 頁面路由器中的國際化屬性不適用於應用程式路由器。了解更多關於 應用程式路由器的國際化

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')
  // 使用第三方服務查詢地理資訊
}

On this page