De repente, mi middleware dejó de funcionar en la implementación. el error es:
> Build error occurred NestedMiddlewareError: Nested Middleware is not allowed, found: pages/_middleware Please move your code to a single file at /middleware instead.La declaración de Vercel es: Por ejemplo, un Middleware en pages/about/_middleware.ts puede mover la lógica a /middleware.ts en la raíz de su repositorio. Luego, se puede usar una declaración condicional para ejecutar el Middleware solo cuando coincida con la ruta about/*:
Cuando ejecuto mi compilación local con pages/_middleware.ts, finaliza sin errores como lo hizo hasta hoy en producción. Si lo cambio a pages/middleware.ts localmente, falla con:
./pages/middleware.ts 2:1 Error: next/server should not be imported outside of pages/_middleware.js. See: https://nextjs.org/docs/messages/no-server-import-in-page @next/next/no-server-import-in-pageArchivo de software intermedio:
import { getToken } from "next-auth/jwt"; import { NextRequest, NextResponse } from "next/server"; export async function middleware(req: NextRequest, res: NextResponse) { if (req.nextUrl.pathname === "/") { const session = await getToken({ req, secret: process.env.JWT_SECRET, secureCookie: process.env.NODE_ENV === "production", }); // You could also check for any property on the session object, // like role === "admin" or name === "John Doe", etc. if (!session) { const url = req.nextUrl.clone(); url.pathname = "/login"; return NextResponse.redirect(url); } // If user is authenticated, continue. } }Tenía el mismo problema. Descubrí que Next acaba de lanzar v12.2.0, que estabiliza la API de middleware con algunos cambios importantes. Consulte la guía de migración aquí https://nextjs.org/docs/messages/middleware-upgrade-guide
Solo tuve que mover y cambiar el nombre de mi archivo de Middleware de /pages/_middleware.js a /middleware.js
Además, tuve que migrar la funcionalidad al nuevo URLPattern (explicado también en la guía de migración)