Ich habe eine Webanwendung mit Node.js und Express erstellt. Jetzt möchte ich alle registrierten Routen mit den entsprechenden Methoden auflisten.
ZB wenn ich hingerichtet habe
app.get('/', function (...) { ... });
app.get('/foo/:id', function (...) { ... });
app.post('/foo/:id', function (...) { ... });
Ich möchte ein Objekt (oder etwas Ähnliches) abrufen, wie zum Beispiel:
{
get: [ '/', '/foo/:id' ],
post: [ '/foo/:id' ]
}
Ist das möglich und wenn ja, wie?
UPDATE: In der Zwischenzeit habe ich ein npm-Paket namens get-route erstellt , das die Routen aus einer bestimmten Anwendung extrahiert, wodurch dieses Problem behoben wird. Derzeit wird nur Express 4.x unterstützt, aber ich denke, im Moment ist dies in Ordnung. Nur zur Info.
Antworten:
Express 3.x.
Okay, habe es selbst gefunden ... es ist nur
app.routes
:-)Express 4.x.
Anwendungen - erstellt mit
express()
Router - gebaut mit
express.Router()
Hinweis : Der Stack enthält auch die Middleware-Funktionen. Er sollte gefiltert werden, um nur die "Routen" abzurufen.
quelle
app.routes.routes
- was bedeutet, ich könnte JSON.stringify (app.routes.routes) machenapp._router.stack
app._router.stack
ist undefiniert.quelle
Dadurch werden Routen direkt in der App registriert (über app.VERB) und Routen, die als Router-Middleware registriert sind (über app.use). Express 4.11.0
quelle
Ich habe einen alten Beitrag, der nicht mehr online ist, an meine Bedürfnisse angepasst. Ich habe express.Router () verwendet und meine Routen folgendermaßen registriert:
Ich habe die Datei document.js in apiTable.js umbenannt und wie folgt angepasst:
dann nenne ich es in meinem server.js so:
Das Ergebnis sieht folgendermaßen aus:
Es ist nur ein Beispiel, könnte aber von Nutzen sein. Ich hoffe.
quelle
Hier ist eine kleine Sache, die ich nur benutze, um die registrierten Pfade in Express 4.x zu erhalten
quelle
${Object.keys(r.methods).join(', ')} ${r.path}
))DEBUG=express:* node index.js
Wenn Sie Ihre App mit dem obigen Befehl ausführen, wird Ihre App mit
DEBUG
Modul gestartet und es werden Routen sowie alle verwendeten Middleware-Funktionen angegeben.Sie können verweisen auf: ExpressJS - Debuggen und Debuggen .
quelle
DEBUG=express:paths
nur die Pfadausgabe und nicht alle anderen Debug-Meldungen angezeigt werden sollen. Vielen Dank!Hacky Copy / Paste-Antwort mit freundlicher Genehmigung von Doug Wilson zu den Express-Github-Themen . Schmutzig, wirkt aber wie ein Zauber.
Produziert
quelle
print
?https://www.npmjs.com/package/express-list-endpoints funktioniert ziemlich gut.
Beispiel
Verwendung:
Ausgabe:
quelle
server = express(); app1 = express(); server.use('/app1', app1); ...
Eine Funktion zum Protokollieren aller Routen in Express 4 (kann für v3 ~ leicht angepasst werden)
Protokollausgabe:
Hat dies zu einem NPM gemacht https://www.npmjs.com/package/express-list-routes
quelle
JSON-Ausgabe
sieht aus wie das:
String-Ausgabe
sieht aus wie das:
Diese basieren auf @ corvid's Antwort
hoffe das hilft
quelle
Ich war von Labithiotis 'Express-Listen-Routen inspiriert, wollte aber einen Überblick über alle meine Routen und Brute-URLs auf einmal haben und keinen Router angeben und jedes Mal das Präfix herausfinden. Ich habe mir einfach ausgedacht, die Funktion app.use durch meine eigene Funktion zu ersetzen, in der die baseUrl und der angegebene Router gespeichert sind. Von dort kann ich jede Tabelle aller meiner Routen ausdrucken.
HINWEIS Dies funktioniert für mich, da ich meine Routen in einer bestimmten Routendatei (Funktion) deklariere, die im App-Objekt wie folgt übergeben wird:
Auf diese Weise kann ich ein anderes 'App'-Objekt mit einer Fake-Use-Funktion übergeben und ALLE Routen abrufen. Dies funktioniert bei mir (einige Fehler wurden aus Gründen der Klarheit entfernt, funktionieren aber immer noch für das Beispiel):
Dieses vollständige Beispiel (mit einigen grundlegenden CRUD-Routern) wurde gerade getestet und ausgedruckt:
Mit cli-table habe ich so etwas bekommen:
Welches tritt Arsch.
quelle
Express 4
Bei einer Express 4- Konfiguration mit Endpunkten und verschachtelten Routern
Durch Erweitern der @ caleb- Antwort können alle Routen rekursiv und sortiert abgerufen werden .
Für die grundlegende Ausgabe von Zeichenfolgen.
Update 1:
Aufgrund der internen Einschränkungen von Express 4 ist es nicht möglich, gemountete Apps und gemountete Router abzurufen. Beispielsweise ist es nicht möglich, Routen aus dieser Konfiguration abzurufen.
quelle
Benötigen Sie einige Anpassungen, sollte aber für Express v4 funktionieren. Einschließlich der mit hinzugefügten Routen
.use()
.Bearbeiten: Code-Verbesserungen
quelle
Leicht aktualisierter und funktionaler Ansatz für die Antwort von @ prranay:
quelle
Das hat bei mir funktioniert
O / P:
quelle
Express-Router initialisieren
Benutzercontroller importieren
Benutzerrouten
API-Routen exportieren
Ausgabe
quelle
In Express 3.5.x füge ich Folgendes hinzu, bevor ich die App starte, um die Routen auf meinem Terminal zu drucken:
Vielleicht kann es helfen ...
quelle
Verwenden Sie einfach dieses npm-Paket, es gibt sowohl die Webausgabe als auch die Terminalausgabe in einer schön formatierten Tabellenansicht.
https://www.npmjs.com/package/express-routes-catalogue
quelle
express-routes-catalogue
zeigt auch die Routen wie HTML, ehile die andere nicht.Also habe ich mir alle Antworten angesehen .. mochte die meisten nicht .. nahm einige von ein paar .. machte dies:
nicht die schönste .. aber verschachtelt, und macht den Trick
Beachten Sie auch die 20 dort ... Ich gehe nur davon aus, dass es keine normale Route mit 20 Methoden geben wird. Also schließe ich, dass es alles ist.
quelle
Routendetails sind Routen für "Express": "4.xx",
EINFACHE AUSGABE DES CODES
quelle
Hier ist eine einzeilige Funktion zum hübschen Drucken der Routen in einem Express
app
:quelle
Ich habe ein Paket veröffentlicht, das alle Middleware sowie Routen druckt. Dies ist sehr nützlich, wenn Sie versuchen, eine Express-Anwendung zu prüfen. Sie mounten das Paket als Middleware, sodass es sich selbst ausdruckt:
https://github.com/ErisDS/middleware-stack-printer
Es druckt eine Art Baum wie:
quelle