NextResponse
NextResponse расширяет Web Response API дополнительными удобными методами.
cookies
Чтение или изменение заголовка Set-Cookie
в ответе.
set(name, value)
Устанавливает cookie с заданным именем и значением в ответе.
// Для входящего запроса /home
let response = NextResponse.next()
// Устанавливаем cookie для скрытия баннера
response.cookies.set('show-banner', 'false')
// Ответ будет содержать заголовок `Set-Cookie:show-banner=false;path=/home`
return response
get(name)
Возвращает значение cookie по имени. Если cookie не найдена, возвращается undefined
. Если найдено несколько cookie, возвращается первая.
// Для входящего запроса /home
let response = NextResponse.next()
// { name: 'show-banner', value: 'false', Path: '/home' }
response.cookies.get('show-banner')
getAll()
Возвращает значения cookie по имени. Если имя не указано, возвращает все cookie из ответа.
// Для входящего запроса /home
let response = NextResponse.next()
// [
// { name: 'experiments', value: 'new-pricing-page', Path: '/home' },
// { name: 'experiments', value: 'winter-launch', Path: '/home' },
// ]
response.cookies.getAll('experiments')
// Альтернативно, получить все cookie для ответа
response.cookies.getAll()
delete(name)
Удаляет cookie с указанным именем из ответа.
// Для входящего запроса /home
let response = NextResponse.next()
// Возвращает true при успешном удалении, false если ничего не удалено
response.cookies.delete('experiments')
json()
Создает ответ с заданным JSON-телом.
import { NextResponse } from 'next/server'
export async function GET(request: Request) {
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 })
}
import { NextResponse } from 'next/server'
export async function GET(request) {
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 })
}
redirect()
Создает ответ, перенаправляющий на указанный URL.
import { NextResponse } from 'next/server'
return NextResponse.redirect(new URL('/new', request.url))
URL может быть создан и изменен перед использованием в методе NextResponse.redirect()
. Например, можно использовать свойство request.nextUrl
для получения текущего URL и его модификации перед перенаправлением.
import { NextResponse } from 'next/server'
// Для входящего запроса...
const loginUrl = new URL('/login', request.url)
// Добавляем ?from=/incoming-url к URL /login
loginUrl.searchParams.set('from', request.nextUrl.pathname)
// И перенаправляем на новый URL
return NextResponse.redirect(loginUrl)
rewrite()
Создает ответ, который переписывает (проксирует) указанный URL, сохраняя исходный URL в браузере.
import { NextResponse } from 'next/server'
// Входящий запрос: /about, браузер показывает /about
// Переписанный запрос: /proxy, браузер показывает /about
return NextResponse.rewrite(new URL('/proxy', request.url))
next()
Метод next()
полезен в Middleware, так как позволяет завершить обработку и продолжить маршрутизацию.
import { NextResponse } from 'next/server'
return NextResponse.next()
Также можно передавать заголовки при создании ответа:
import { NextResponse } from 'next/server'
// Для входящего запроса...
const newHeaders = new Headers(request.headers)
// Добавляем новый заголовок
newHeaders.set('x-version', '123')
// Создаем ответ с новыми заголовками
return NextResponse.next({
request: {
// Новые заголовки запроса
headers: newHeaders,
},
})