NextResponse
NextResponse étend l'API Web Response avec des méthodes supplémentaires pratiques.
cookies
Lire ou modifier l'en-tête Set-Cookie
de la réponse.
set(name, value)
Étant donné un nom, définit un cookie avec la valeur donnée 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 aura un en-tête `Set-Cookie:show-banner=false;path=/home`
return response
get(name)
Étant donné un nom de cookie, retourne la valeur du cookie. Si le cookie n'est pas trouvé, undefined
est retourné. Si plusieurs cookies sont trouvés, 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()
Étant donné un nom de cookie, retourne les valeurs du cookie. Si aucun nom n'est donné, 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, récupère tous les cookies de la réponse
response.cookies.getAll()
delete(name)
Étant donné un nom de cookie, supprime le cookie 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 })
}
import { NextResponse } from 'next/server'
export async function GET(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 actuelle, puis la modifier pour rediriger vers une URL différente.
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 (proxifie) l'URL donnée tout en préservant 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 tôt 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,
},
})