> [!NOTE] > This API is unstable and might change or not be shipped as stable. This PR introduces **Request Interceptors** as a complementary solution to Middleware. They allow users to run code at the origin – in the same Function/process as the page, server action, or route handler – before the page is rendered or the server action or route handler is executed. ## Goals - Improve DX by providing a mechanism to run code at the origin before a page is rendered, a server action is execu
Die Einführung der Request Interceptors in Next.js bietet die Möglichkeit, Code im gleichen Prozess wie Seiten, Serveraktionen oder Routen-Handler auszuführen, bevor diese gerendert oder ausgeführt werden. Dies verbessert die Developer Experience (DX) und bietet umfassenden Zugriff auf Node.js-APIs.
Um Interceptors zu aktivieren, setze experimental.interceptors auf true in der next.config.ts Datei:
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
experimental: { interceptors: true },
};
export default nextConfig;Ein Interceptor wird als asynchrone Funktion exportiert und kann mithilfe von redirect oder notFound den Steuerfluss beeinflussen. Beispiel:
export default async function intercept(request: NextRequest): Promise<void> {
// Logik des Interceptors...
// Optionen zur Steuerflusskontrolle:
redirect('/login');
// oder
notFound();
}Um eine Authentifizierung auf einer Route wie /dashboard zu implementieren, erstellen Sie app/dashboard/interceptor.ts:
import { auth } from '@/auth';
import { redirect } from 'next/navigation';
const signInPathname = '/dashboard/sign-in';
export default async function intercept(request: NextRequest): Promise<void> {
const session = await auth();
if (!session && request.nextUrl.pathname !== signInPathname) {
redirect(signInPathname);
}
}Zur Verbesserung der Leistung empfiehlt sich die Verwendung von Middleware in Verbindung mit Interceptors. Beispiel für middleware.ts:
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
const signInPathname = '/dashboard/sign-in';
export function middleware(request: NextRequest): NextResponse {
if (
!request.nextUrl.pathname.startsWith(signInPathname) &&
!request.cookies.has('session')
) {
return NextResponse.redirect(new URL(signInPathname, request.url));
}
return NextResponse.next();
}
export const config = { matcher: ['/dashboard/:path*'] };Interceptors bringen Einschränkungen mit sich, wie die Unfähigkeit, den Antwortstatus oder Header zu ändern. Für Änderungen an Cookies sollten Middleware oder Serveraktionen genutzt werden.
Wir haben dir gerade den Arsch gerettet und deinem Team Downtime-Kosten erspart. Keine Paywall, kein Formular. Wenn dein Server wieder atmet, schließe den kybernetischen Kreislauf: