Eu tenho um aplicativo da Web criado usando o Node.js e o Express. Agora eu gostaria de listar todas as rotas registradas com seus métodos apropriados.
Por exemplo, se eu executei
app.get('/', function (...) { ... });
app.get('/foo/:id', function (...) { ... });
app.post('/foo/:id', function (...) { ... });
Gostaria de recuperar um objeto (ou algo equivalente a isso) como:
{
get: [ '/', '/foo/:id' ],
post: [ '/foo/:id' ]
}
Isso é possível e, se sim, como?
ATUALIZAÇÃO: Enquanto isso, eu criei um pacote npm chamado get-routes que extrai as rotas de um determinado aplicativo, que resolve esse problema. Atualmente, apenas o Express 4.x é suportado, mas acho que por enquanto está bom. Apenas para sua informação.
Respostas:
express 3.x
Ok, encontrei-me ... é apenas
app.routes
:-)express 4.x
Aplicações - construídas com
express()
Roteadores - construídos com
express.Router()
Nota : A pilha também inclui as funções de middleware; ela deve ser filtrada para obter apenas as "rotas" .
fonte
app.routes.routes
- o que significa que eu poderia fazer JSON.stringify (app.routes.routes)app._router.stack
app._router.stack
é indefinido.fonte
Isso obtém rotas registradas diretamente no aplicativo (via app.VERB) e rotas registradas como middleware do roteador (via app.use). Express 4.11.0
fonte
Adaptei um post antigo que não está mais online para minhas necessidades. Eu usei express.Router () e registrei minhas rotas assim:
Renomeei o arquivo document.js em apiTable.js e o adaptei da seguinte maneira:
então eu chamo no meu server.js assim:
O resultado fica assim:
É apenas um exemplo, mas pode ser útil .. espero ..
fonte
Aqui está uma coisinha que eu uso apenas para obter os caminhos registrados no express 4.x
fonte
${Object.keys(r.methods).join(', ')} ${r.path}
))DEBUG=express:* node index.js
Se você executar seu aplicativo com o comando acima, ele será iniciado com o
DEBUG
módulo e fornecerá rotas, além de todas as funções de middleware que estão em uso.Você pode consultar: ExpressJS - Depuração e depuração .
fonte
DEBUG=express:paths
apenas para ver a saída do caminho e não todas as outras mensagens de depuração. Obrigado!Resposta copiada / colada por Hacky, cortesia de Doug Wilson, sobre os problemas expressos do github . Sujo, mas funciona como um encanto.
Produz
fonte
print
?https://www.npmjs.com/package/express-list-endpoints funciona muito bem.
Exemplo
Uso:
Resultado:
fonte
server = express(); app1 = express(); server.use('/app1', app1); ...
Uma função para registrar todas as rotas no express 4 (pode ser facilmente ajustado para a v3 ~)
Registra a saída:
Transforme isso em um NPM https://www.npmjs.com/package/express-list-routes
fonte
saída json
se parece com isso:
saída de string
se parece com isso:
estes são baseados na resposta de @ corvid
espero que isto ajude
fonte
Fui inspirado pelas rotas de lista expressa do Labithiotis, mas queria uma visão geral de todas as minhas rotas e URLs brutos de uma só vez, e não especificar um roteador, e descobrir o prefixo de cada vez. Algo que surgiu foi simplesmente substituir a função app.use por minha própria função, que armazena o baseUrl e o roteador fornecido. De lá, posso imprimir qualquer tabela de todas as minhas rotas.
OBSERVAÇÃO isso funciona para mim porque declaro minhas rotas em um arquivo de rotas específico (função) que é passado no objeto do aplicativo, assim:
Isso permite que eu passe outro objeto 'app' com uma função de uso falso, e posso obter TODAS as rotas. Isso funciona para mim (removemos alguma verificação de erro para maior clareza, mas ainda funciona para o exemplo):
Este exemplo completo (com alguns roteadores CRUD básicos) acabou de ser testado e impresso:
Usando cli-table, eu tenho algo como isto:
O que chuta a bunda.
fonte
Express 4
Dada uma configuração do Express 4 com terminais e roteadores aninhados
Expandindo a resposta @caleb , é possível obter todas as rotas recursivamente e classificadas.
Para saída básica de strings.
Atualização 1:
Devido às limitações internas do Express 4, não é possível recuperar aplicativos e roteadores montados. Por exemplo, não é possível obter rotas a partir desta configuração.
fonte
Precisa de alguns ajustes, mas deve funcionar para o Express v4. Incluindo as rotas adicionadas
.use()
.editar: aprimoramentos de código
fonte
Abordagem ligeiramente atualizada e mais funcional da resposta do @ prranay:
fonte
Isso funcionou para mim
O / P:
fonte
Inicializar o roteador expresso
Importar controlador de usuário
Rotas do usuário
Exportar rotas da API
Resultado
fonte
No Express 3.5.x, adiciono isso antes de iniciar o aplicativo para imprimir as rotas no meu terminal:
Talvez possa ajudar ...
fonte
Você pode implementar uma
/get-all-routes
API:Aqui está uma demonstração: https://glitch.com/edit/#!/get-all-routes-in-nodejs
fonte
Então, eu estava olhando para todas as respostas .. não gostei mais .. tirei algumas de algumas .. fiz o seguinte:
não é a mais bonita .. mas aninhada, e faz o truque
observe também os 20 lá ... Eu suponho que não haverá uma rota normal com 20 métodos .. então deduzo que é tudo ..
fonte
os detalhes da rota estão listando a rota para "express": "4.xx",
SAÍDA SIMPLES DE CÓDIGO
fonte
Basta usar este pacote npm, ele fornecerá a saída da Web e a saída do terminal em uma bela exibição de tabela formatada.
https://www.npmjs.com/package/express-routes-catalogue
fonte
express-routes-catalogue
também exibe as rotas como HTML, mesmo que a outra não.Aqui está uma função de uma linha para imprimir as rotas em um Express
app
:fonte
Publiquei um pacote que imprime todo o middleware e rotas, realmente útil ao tentar auditar um aplicativo expresso. Você monta o pacote como middleware, para que ele mesmo se imprima:
https://github.com/ErisDS/middleware-stack-printer
Imprime um tipo de árvore como:
fonte