Middleware
Le fichier src/app/middleware.ts s'exécute une fois par requête AVANT la distribution de la page. Retourner undefined laisse passer la requête ; retourner une Response court-circuite avec cette réponse (statut, en-têtes, corps).
Astuce
Utilisez toujours config.matcher pour cibler uniquement les chemins concernés — sans matcher, chaque requête (assets, API, pages) passe par le V8, ce qui supprime l'avantage du cache ISR pour toutes les routes statiques.
Essayer
- /examples/middleware/protected — le middleware retourne un 401 car aucun jeton n'est présent.
- /examples/middleware/protected?token=letmein — le middleware laisse passer ; la page protégée s'affiche.
// src/app/middleware.ts
//
// config.matcher is a path filter. Without it every request — assets,
// API hits, page loads — pays the V8 round-trip just to get a pass-
// through. Listing only the gated paths lets the rest of the site
// serve at the cache-hit ceiling.
export const config = {
matcher: ["/examples/middleware/protected/:path*"],
};
export default function middleware(
request: Request,
ctx: { path: string },
): Response | undefined {
if (ctx.path.startsWith("/examples/middleware/protected")) {
const url = new URL(request.url);
if (url.searchParams.get("token") !== "letmein") {
return new Response("Unauthorized.\n", {
status: 401,
headers: { "content-type": "text/plain" },
});
}
}
return undefined; // pass-through
}