Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao trabalhar com aplicações Node.js usando o framework Express, uma dúvida comum é como obter uma lista completa de rotas registradas, incluindo seus métodos HTTP e caminhos, para facilitar tarefas de documentação, depuração ou validação de configuração.
Na prática, muitas equipes criam rotas dinamicamente ou utilizam middlewares que interceptam o fluxo, o que torna difícil ter uma visão consolidada de todas as rotas disponíveis na aplicação. Essa necessidade se torna evidente ao realizar auditorias rápidas, gerar documentação automática ou monitorar o comportamento da API durante o desenvolvimento.
Em versões modernas do Express, o objeto que armazena as rotas é acessível via propriedade _router.stack do objeto app. Essa pilha contém tanto middlewares quanto rotas, o que exige um filtro adicional para extrair apenas os registros de rota propriamente ditos. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
const getRoutes = (app) => {
const stack = app._router.stack. const routes = {
get: [], post: [], put: [], delete: [], patch: []
}. stack.forEach((layer) => {
if (layer.route) {
const methods = Object.keys(layer.route.methods). methods.forEach((method) => {
if (routes[method]) {
routes[method].push(layer.route.path). }
}). }
}). return routes. }. // Uso:
// const registeredRoutes = getRoutes(app). // console.log(registeredRoutes).
Essa abordagem garante que apenas as rotas registradas explicitamente sejam listadas, ignorando middlewares genéricos ou funções anônimas. Além disso, ela funciona para rotas registradas via app.METHOD() ou via express.Router(). Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
_router.stack), o que pode mudar em futuras versões do Express ou ser considerado uma prática de risco.Para projetos maiores, criar uma função que percorre recursivamente toda a árvore de roteadores, incluindo roteadores aninhados, fornece uma visão completa. Além disso, pode-se integrar essa rotina em scripts de build ou tarefas de monitoramento. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
const getAllRoutes = (router, basePath = '') => {
const routes = []. router.stack.forEach((layer) => {
if (layer.route) {
const path = basePath + layer.route.path. Object.keys(layer.route.methods).forEach((method) => {
routes.push({ method: method.toUpperCase(), path }). }). } else if (layer.name === 'router' && layer.handle.stack) {
const newBasePath = basePath + (layer.regexp.source.replace('^\/', '').replace('\/?, '').replace('\/', '/')). routes.push(...getAllRoutes(layer.handle, newBasePath)). }
}). return routes. }. // Uso:
// const allRoutes = getAllRoutes(app). // console.log(allRoutes). A decisão fica mais saudável quando o time consegue medir o impacto depois.
Ter uma visão consolidada das rotas registradas em uma aplicação Express ajuda na manutenção, documentação e segurança. Ainda que o método envolva explorar propriedades internas, é uma solução prática e eficiente na maioria dos cenários. Para ambientes complexos, uma abordagem recursiva e automatizada garante maior cobertura e confiabilidade. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Se você precisa frequentemente dessa inspeção, considere criar uma ferramenta de auditoria de rotas ou um middleware que registre tudo ao iniciar a aplicação. Assim, evita surpresas na hora de depurar ou mostrar seu API para outros times. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Carregando comentários...