NextResponse

NextResponse étend l'API Web Response avec des méthodes utilitaires supplémentaires.

cookies

Lire ou modifier l'en-tête Set-Cookie de la réponse.

set(nom, valeur)

Définit un cookie avec le nom et la valeur donnés dans la réponse.

// Pour une requête entrante /home
let response = NextResponse.next()
// Définit un cookie pour masquer la bannière
response.cookies.set('show-banner', 'false')
// La réponse contiendra un en-tête `Set-Cookie:show-banner=false;path=/home`
return response

get(nom)

Retourne la valeur du cookie correspondant au nom donné. Si le cookie n'est pas trouvé, retourne undefined. Si plusieurs cookies correspondent, le premier est retourné.

// Pour une requête entrante /home
let response = NextResponse.next()
// { name: 'show-banner', value: 'false', Path: '/home' }
response.cookies.get('show-banner')

getAll()

Retourne les valeurs des cookies correspondant au nom donné. Si aucun nom n'est spécifié, retourne tous les cookies de la réponse.

// Pour une requête entrante /home
let response = NextResponse.next()
// [
//   { name: 'experiments', value: 'new-pricing-page', Path: '/home' },
//   { name: 'experiments', value: 'winter-launch', Path: '/home' },
// ]
response.cookies.getAll('experiments')
// Alternative : obtenir tous les cookies de la réponse
response.cookies.getAll()

delete(nom)

Supprime le cookie correspondant au nom donné de la réponse.

// Pour une requête entrante /home
let response = NextResponse.next()
// Retourne true si supprimé, false si rien n'est supprimé
response.cookies.delete('experiments')

json()

Produit une réponse avec le corps JSON donné.

import { NextResponse } from 'next/server'

export async function GET(request: Request) {
  return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 })
}

redirect()

Produit une réponse qui redirige vers une URL.

import { NextResponse } from 'next/server'

return NextResponse.redirect(new URL('/new', request.url))

L'URL peut être créée et modifiée avant d'être utilisée dans la méthode NextResponse.redirect(). Par exemple, vous pouvez utiliser la propriété request.nextUrl pour obtenir l'URL courante, puis la modifier pour rediriger vers une autre URL.

import { NextResponse } from 'next/server'

// Pour une requête entrante...
const loginUrl = new URL('/login', request.url)
// Ajoute ?from=/incoming-url à l'URL /login
loginUrl.searchParams.set('from', request.nextUrl.pathname)
// Et redirige vers la nouvelle URL
return NextResponse.redirect(loginUrl)

rewrite()

Produit une réponse qui réécrit (proxy) l'URL donnée tout en conservant l'URL originale.

import { NextResponse } from 'next/server'

// Requête entrante : /about, le navigateur affiche /about
// Requête réécrite : /proxy, le navigateur affiche /about
return NextResponse.rewrite(new URL('/proxy', request.url))

next()

La méthode next() est utile pour le Middleware, car elle permet de retourner prématurément et de continuer le routage.

import { NextResponse } from 'next/server'

return NextResponse.next()

Vous pouvez également transmettre des headers lors de la production de la réponse :

import { NextResponse } from 'next/server'

// Pour une requête entrante...
const newHeaders = new Headers(request.headers)
// Ajoute un nouvel en-tête
newHeaders.set('x-version', '123')
// Et produit une réponse avec les nouveaux en-têtes
return NextResponse.next({
  request: {
    // Nouveaux en-têtes de requête
    headers: newHeaders,
  },
})

On this page