Middleware no Next.js
Middleware no Next.js é uma forma de “interceptar” um request.
Middleware permite que você execute código antes que o request (requisição) seja completado. Ou seja, é uma forma de “injetar” código dentro do “ciclo de vida” de um request/response tradicional.
O que é um middleware
Apesar de ser aqui uma funcionalidade do Next.js, a ideia de middleware não é recente. Independentemente do framework, um middleware nada mais faz do que:
- Recebe um request;
- Faz (ou não) alguma coisa;
- (i) Retorna um response; ou (ii) passa para o próximo middleware.
E no Next.js?
No Next.js é a mesma coisa:
- Middleware é uma função que recebe o request como argumento;
- Você pode fazer algum código (adicionar response cookies ou headers);
- Independentemente do que fizer, deverá retornar
- um
NextResponse.next()
ouResponse
; ou - um
NextResponse.redirect()
para redirecionar o request para outra URL; ou - um
NextResponse.rewrite()
para reescrever a resposta.
- um
Exportando um config
Como a função middleware roda em todas as rotas, é necessário exportar um objeto de configuração chamado config
.
O objeto config, por sua vez, deverá ter uma propriedade chamada matcher
que é um array que serve como filtro para o Middleware rodar em apenas alguns paths específicos.
Configuração padrão
Um padrão recomendado pela documentação é:
export const config = { matcher: '/((?!api|_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)',};
Com ele, o middleware não irá rodar em rotas tais como:
- sitemaps;
- robots.txt;
- favicon;
- api;
- arquivos estáticos;
- servidor de imagem do next.
Middleware roda no Edge
Por mais que o Middleware rode no servidor, considere que não é possível acessar APIs do Node. Existe uma config experimental que dá suporte ao Node, mas não é garantia de que seja uma funcionalidade estável.