Tengo una aplicación web creada con Node.js y Express. Ahora me gustaría enumerar todas las rutas registradas con sus métodos apropiados.
Por ejemplo, si he ejecutado
app.get('/', function (...) { ... });
app.get('/foo/:id', function (...) { ... });
app.post('/foo/:id', function (...) { ... });
Me gustaría recuperar un objeto (o algo equivalente a eso) como:
{
get: [ '/', '/foo/:id' ],
post: [ '/foo/:id' ]
}
¿Es posible? y si lo es, cómo?
ACTUALIZACIÓN: Mientras tanto, he creado un paquete npm llamado get-routes que extrae las rutas de una aplicación determinada, lo que resuelve este problema. Actualmente, solo se admite Express 4.x, pero supongo que por ahora esto está bien. Solo para tu información.
Respuestas:
expreso 3.x
Bien, lo encontré yo mismo ... es solo
app.routes
:-)expreso 4.x
Aplicaciones : construidas con
express()
Enrutadores : construidos con
express.Router()
Nota : La pila también incluye las funciones de middleware, debe filtrarse para obtener solo las "rutas" .
fuente
app.routes.routes
, lo que significa que podía hacer JSON.stringify (app.routes.routes)app._router.stack
app._router.stack
no está definido.fuente
Esto obtiene rutas registradas directamente en la aplicación (a través de app.VERB) y rutas registradas como middleware del enrutador (a través de app.use). Express 4.11.0
fuente
He adaptado una publicación anterior que ya no está en línea para mis necesidades. Utilicé express.Router () y registré mis rutas de esta manera:
Cambié el nombre del archivo document.js en apiTable.js y lo adapté así:
entonces lo llamo en mi server.js así:
El resultado se ve así:
Es solo un ejemplo, pero podría ser útil ... espero ...
fuente
Aquí hay una pequeña cosa que uso solo para obtener las rutas registradas en express 4.x
fuente
${Object.keys(r.methods).join(', ')} ${r.path}
))DEBUG=express:* node index.js
Si ejecuta su aplicación con el comando anterior, iniciará su aplicación con
DEBUG
módulo y le dará rutas, además de todas las funciones de middleware que están en uso.Puede consultar: ExpressJS: depuración y depuración .
fuente
DEBUG=express:paths
para ver la salida de la ruta y no todos los demás mensajes de depuración. ¡Gracias!Hacky copiar / pegar respuesta cortesía de Doug Wilson sobre los problemas express github . Sucio pero funciona como un encanto.
Produce
fuente
print
?https://www.npmjs.com/package/express-list-endpoints funciona bastante bien.
Ejemplo
Uso:
Salida:
fuente
server = express(); app1 = express(); server.use('/app1', app1); ...
Una función para registrar todas las rutas en express 4 (se puede ajustar fácilmente para v3 ~)
Salida de registros:
Hizo esto en un NPM https://www.npmjs.com/package/express-list-routes
fuente
salida json
Se ve como esto:
salida de cadena
Se ve como esto:
estos se basan en la respuesta de @ corvid
espero que esto ayude
fuente
Me inspiré en la lista de rutas expresas de Labithiotis, pero quería una visión general de todas mis rutas y urls brutas de una sola vez, y no especificar un enrutador, y calcular el prefijo cada vez. Algo que se me ocurrió fue simplemente reemplazar la función app.use con mi propia función que almacena la baseUrl y el enrutador dado. Desde allí puedo imprimir cualquier tabla de todas mis rutas.
NOTA: esto funciona para mí porque declaro mis rutas en un archivo de rutas específico (función) que se pasa en el objeto de la aplicación, así:
Esto me permite pasar otro objeto 'aplicación' con una función de uso falso, y puedo obtener TODAS las rutas. Esto funciona para mí (eliminó algunos errores de comprobación de claridad, pero aún funciona para el ejemplo):
Este ejemplo completo (con algunos enrutadores CRUD básicos) se acaba de probar e imprimir:
Usando cli-table obtuve algo como esto:
Lo que patea traseros.
fuente
Expreso 4
Dada una configuración Express 4 con puntos finales y enrutadores anidados
Ampliando la respuesta @caleb es posible obtener todas las rutas de forma recursiva y ordenadas.
Para salida de cadena básica.
Actualización 1:
Debido a las limitaciones internas de Express 4, no es posible recuperar la aplicación montada y los enrutadores montados. Por ejemplo, no es posible obtener rutas desde esta configuración.
fuente
Necesita algunos ajustes, pero debería funcionar para Express v4. Incluyendo esas rutas agregadas con
.use()
.editar: mejoras de código
fuente
Enfoque ligeramente actualizado y más funcional a la respuesta de @ prranay:
fuente
Esto funciono para mi
O / P:
fuente
Inicializar enrutador express
Importar controlador de usuario
Rutas de usuario
Exportar rutas API
Salida
fuente
En Express 3.5.x, agrego esto antes de iniciar la aplicación para imprimir las rutas en mi terminal:
Tal vez pueda ayudar ...
fuente
Puede implementar una
/get-all-routes
API:Aquí hay una demostración: https://glitch.com/edit/#!/get-all-routes-in-nodejs
fuente
Así que estaba mirando todas las respuestas ... no me gustó la mayoría ... tomé algunas de algunas ... hice esto:
no el más bonito ... pero anidado, y hace el truco
También tenga en cuenta el 20 allí ... Supongo que no habrá una ruta normal con 20 métodos ... así que deduzco que es todo ...
fuente
los detalles de la ruta incluyen la ruta de "express": "4.xx",
SALIDA SIMPLE DEL CÓDIGO
fuente
Simplemente use este paquete npm, dará la salida web y la salida del terminal en una buena vista de tabla formateada.
https://www.npmjs.com/package/express-routes-catalogue
fuente
express-routes-catalogue
también muestra las rutas como HTML, aunque el otro no.Aquí hay una función de una línea para imprimir bonitas las rutas en un Express
app
:fuente
Publiqué un paquete que imprime todo el middleware así como las rutas, realmente útil cuando intento auditar una aplicación express. Monta el paquete como middleware, por lo que incluso se imprime solo:
https://github.com/ErisDS/middleware-stack-printer
Imprime una especie de árbol como:
fuente