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,
  },
})