Middleware kan inte returnera ett svar med body. Det kan bara omdirigera, skriva om URL:er, eller ändra headers.
Förklaring
Next.js Middleware körs i en edge-runtime med begränsade möjligheter jämfört med fullständiga Route Handlers. Middleware är designat för att modifiera requests på väg in och ut, inte för att returnera fullständiga HTTP-svar med body-innehåll.
För ändamål som kräver ett svar med data, till exempel en endpoint som validerar tokens, används en Route Handler (app/api/.../route.js) i stället.
Vanliga orsaker
Middleware returnerar Response.json() eller new Response('text') med body-innehåll. Försök att returnera ett 401-svar med body direkt från middleware.
Lösning
Omdirigera i stället för att returnera data:
import { NextResponse } from 'next/server';
export function middleware(request) {
const isAuthenticated = checkAuth(request);
if (!isAuthenticated) {
return NextResponse.redirect(new URL('/login', request.url));
}
return NextResponse.next();
}Behöver du returnera ett API-svar, flytta logiken till en Route Handler.