In meiner NodeJS- express
Anwendung habe ich app.js
einige gemeinsame Routen. Dann in einemwf.js
möchte ich Datei noch ein paar Routen definieren.
Wie kann ich app.js
andere in der wf.js
Datei definierte Routenhandler erkennen?
Eine einfache Anforderung scheint nicht zu funktionieren.
Antworten:
Wenn Sie möchten die Routen in einer separaten Datei setzen , zum Beispiel
routes.js
, können Sie die erstellenroutes.js
Datei auf diese Weise:Und dann können Sie es von verlangen
app.js
dass dasapp
Objekt auf folgende Weise übergeben wird:Schauen Sie sich auch diese Beispiele an
quelle
Obwohl dies eine ältere Frage ist, bin ich hier gestolpert und habe nach einer Lösung für ein ähnliches Problem gesucht. Nachdem ich einige der Lösungen hier ausprobiert hatte, ging ich in eine andere Richtung und dachte, ich würde meine Lösung für alle anderen hinzufügen, die hier landen.
In Express 4.x können Sie eine Instanz des Router-Objekts abrufen und eine andere Datei importieren, die mehr Routen enthält. Sie können dies sogar rekursiv tun, sodass Ihre Routen andere Routen importieren, sodass Sie einfach zu wartende URL-Pfade erstellen können. Wenn ich beispielsweise bereits eine separate Routendatei für meinen Endpunkt '/ tests' habe und einen neuen Satz von Routen für '/ tests / automatisiert' hinzufügen möchte, möchte ich diese '/ automatisierten' Routen möglicherweise in eine andere Datei aufteilen Halten Sie meine '/ test'-Datei klein und einfach zu verwalten. Außerdem können Sie Routen logisch nach URL-Pfaden gruppieren, was sehr praktisch sein kann.
Inhalt von ./app.js:
Inhalt von ./routes/tests.js
Inhalt von ./routes/testRoutes/automated.js:
quelle
Aufbauend auf dem Beispiel von @ShadowCloud konnte ich alle Routen dynamisch in ein Unterverzeichnis aufnehmen.
routen / index.js
Platzieren Sie dann die Routendateien wie folgt im Routenverzeichnis:
routen / test1.js
Wiederholen Sie dies so oft wie nötig und dann endlich in app.js Platzierung
quelle
Aufbauend auf der vorherigen Antwort ignoriert diese Version von route / index.js alle Dateien, die nicht auf .js (und sich selbst) enden.
quelle
.DS_Store
Dateien hinzufügte , und es brachte alles durcheinander.Geben Sie dies in das vollständige rekursive Routing aller
.js
Dateien im/routes
Ordner einapp.js
.in
/routes
setzen Siewhatevername.js
und initialisieren Sie Ihre Routen wie folgt aus :quelle
Ich versuche diese Antwort mit "express" zu aktualisieren: "^ 4.16.3". Diese Antwort ähnelt ShortRound1911.
server.js
/src/routes/index.js
/src/routes/siswa_route.js
Ich hoffe das kann jemandem helfen. Viel Spaß beim Codieren!
quelle
Wenn Sie Express-4.x mit TypeScript und ES6 verwenden, ist dies die beste Vorlage:
src/api/login.ts
src/app.ts
Viel sauberer als mit
var
undmodule.exports
.quelle
Eine Änderung an all diesen Antworten:
Verwenden Sie einfach einen regulären Ausdruck, um zu filtern, indem Sie jede Datei im Array testen. Es ist nicht rekursiv, filtert jedoch Ordner heraus, die nicht mit .js enden
quelle
Ich weiß, dass dies eine alte Frage ist, aber ich habe versucht, etwas für mich selbst herauszufinden, und dies ist der Ort, an dem ich gelandet bin. Deshalb wollte ich meine Lösung für ein ähnliches Problem finden, falls jemand anderes die gleichen Probleme hat wie ich. Ich habe. Es gibt ein nettes Knotenmodul namens consign , das viele der hier gezeigten Dateisystem-Aufgaben für Sie erledigt (dh keine readdirSync-Aufgaben). Beispielsweise:
Ich habe eine erholsame API-Anwendung, die ich erstellen möchte, und ich möchte alle Anforderungen, die an '/ api / *' gehen, zur Authentifizierung stellen und alle meine Routen, die in api gehen, in einem eigenen Verzeichnis speichern (Nennen wir es einfach 'api'). Im Hauptteil der App:
Innerhalb des Routenverzeichnisses habe ich ein Verzeichnis namens "api" und eine Datei namens api.js. In api.js habe ich einfach:
Alles hat wie erwartet funktioniert. Hoffe das hilft jemandem.
quelle
Wenn Sie möchten, dass eine separate .js-Datei Ihre Routen besser organisiert, erstellen Sie einfach eine Variable in der
app.js
Datei, die auf ihren Speicherort im Dateisystem verweist:dann,
Wo
.foo
ist eine Funktion in Ihrerwf.js
Datei deklariert? z.Bquelle
wf.foo
usw., da sie wie bei den anderen vorgestellten Lösungen außerhalb des Anwendungsbereichs liegen? Ich beziehe mich auf den Fall, in dem Sie normalerweise auf gemeinsam genutzte Variablen / Funktionen in wf.foo zugreifen würden, wenn diese nicht von app.js getrennt wären.Ich habe ein kleines Plugin dafür geschrieben! Ich hatte es satt, immer wieder denselben Code zu schreiben.
https://www.npmjs.com/package/js-file-req
Ich hoffe es hilft.
quelle
Dies ist möglicherweise die beeindruckendste Frage / Antwort (en) zum Stapelüberlauf, die es je gab. Ich liebe die obigen Lösungen von Sam / Brad. Ich dachte, ich würde mich der von mir implementierten asynchronen Version anschließen:
Meine Verzeichnisstruktur ist etwas anders. Normalerweise definiere ich Routen in app.js (im Stammverzeichnis des Projekts) durch
require
-ing'./routes'
. Folglich überspringe ich den Scheck,index.js
weil ich will einschließen .BEARBEITEN: Sie können dies auch in eine Funktion einfügen und rekursiv aufrufen (ich habe das Beispiel bearbeitet, um dies zu zeigen), wenn Sie Ihre Routen in Ordnern beliebiger Tiefe verschachteln möchten.
quelle
Sie können alle Routenfunktionen in andere Dateien (Module) einfügen und mit der Hauptserverdatei verknüpfen. Fügen Sie in der Express-Hauptdatei eine Funktion hinzu, die das Modul mit dem Server verbindet:
und rufen Sie diese Funktion für jedes Routenmodell auf:
Definieren Sie in den Moduldateien (z. B. login.js) die Funktionen wie folgt:
und exportieren Sie es mit der Anforderungsmethode als Schlüssel. Der Wert ist ein Array von Objekten mit jeweils Pfad- und Funktionstasten.
quelle