R
Interview Deckreact · next.js · senior/staff
0·0·122
Next.js

Middleware no Next.js

Função que roda antes do request chegar na rota. Auth, redirects, headers, A/B testing.

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
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.
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.
// 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*'],
};
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().
39/122← →