Middleware no Next.js
Função que roda antes do request chegar na rota. Auth, redirects, headers, A/B testing.
Definição
Middleware (middleware.ts no root) executa em Edge runtime ANTES do Next.js processar a rota. Pode redirecionar, reescrever URL, modificar headers, adicionar cookies. Roda em TODA request (configurável via matcher).
Problema → Solução
Problema
Lógica que precisa rodar antes da rota: verificar autenticação, redirecionar usuários não logados, adicionar headers de segurança, fazer A/B testing.Solução
middleware.ts intercepta requests no Edge (rápido, global). Retorna NextResponse para redirect/rewrite/next. Configure matcher para limitar quais rotas afeta.Dica de entrevista
Tip
Middleware roda em CADA request — mantenha rápido. Não faça queries pesadas, use Edge runtime. Para auth, valide JWT (rápido), não consulte DB.Código
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(request) {
const token = request.cookies.get('token');
if (!token && request.nextUrl.pathname.startsWith('/admin')) {
return NextResponse.redirect(new URL('/login', request.url));
}
// Adicionar header customizado
const response = NextResponse.next();
response.headers.set('x-custom', 'value');
return response;
}
export const config = {
matcher: ['/admin/:path*', '/api/:path*'],
};Perguntas de entrevista
Q.Middleware vs Server Component para auth?▾
A.Middleware: bloqueia ANTES de carregar a rota (mais rápido para deny). Server Component: pode ler cookies/headers e fazer redirect, mas o componente já começou a renderizar. Use middleware para auth simples, Server Component para lógica complexa.
Q.Middleware roda em Server Components?▾
A.Sim, antes deles. Middleware → Server Component → Client Component. Headers/cookies modificados no middleware estão disponíveis nos Server Components via headers()/cookies().
Q.Como compartilhar dados entre middleware e a rota?▾
A.Via headers customizados (request.headers.set) ou cookies. Os Server Components leem com headers()/cookies().
Termos relacionados
39/122← →