Middleware is returning a response body, which is not supported. Learn more: https://nextjs.org/docs/messages/returning-response-body-in-middleware

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.