Gibt es eine gängige Konvention zum Aufteilen und Modularisieren der app.js
Datei in einer Express.js- Anwendung? Oder ist es üblich, alles in einer einzigen Datei zu speichern?
javascript
node.js
modularity
express
Eric der Rote
quelle
quelle
Antworten:
Ich habe meine wie folgt aufgeteilt:
Ich verwende Exporte, um zurückzugeben, was relevant ist. Zum Beispiel in den Modellen, die ich mache:
und wenn ich dann eine Telefonnummer erstellen muss, ist es so einfach wie:
Wenn ich das Schema verwenden muss, dann
PhoneNumber.schema
(Dies setzt voraus, dass wir vom Routenordner aus arbeiten und 1 Ebene nach oben und dann nach unten zu den Modellen gehen müssen.)
BEARBEITEN 4
Das Express-Wiki enthält eine Liste von Frameworks, die darauf aufbauen.
Ich denke, der Matador von Twitter ist ziemlich gut strukturiert. Wir haben tatsächlich einen sehr ähnlichen Ansatz verwendet, um Teile der App zu laden.
derby.js sieht auch sehr interessant aus. Es ist vergleichbar mit Meteor ohne den ganzen Hype und gibt tatsächlich Kredit, wo Kredit fällig ist (insbesondere Knoten und Express).
BEARBEITEN 3
Wenn Sie ein Fan von CoffeeScript sind (ich bin es nicht) und reeeeaaaaaally das L & F von Rails wollen, gibt es auch Tower.js .
BEARBEITEN 2
Wenn Sie mit Rails vertraut sind und sich nicht um das Ausbluten einiger Konzepte kümmern, gibt es Locomotive . Es ist ein leichtes Framework, das auf Express basiert. Es hat eine sehr ähnliche Struktur wie RoR und überträgt einige der rudimentäreren Konzepte (wie z. B. Routing).
Es lohnt sich, es sich anzusehen, auch wenn Sie nicht vorhaben, es zu verwenden.
BEARBEITEN 1
nodejs-express-mongoose-demo ist sehr ähnlich wie ich meine strukturiert habe. Hör zu.
quelle
Warnung: Wenn ich auf Code verweise, den ich für das Knockout von Knoten zusammen gehackt habe, funktioniert das irgendwie, ist aber alles andere als elegant oder poliert.
Um genauer zu sein, habe
app.js
ich die folgende Datei app.js.Dies bedeutet im Grunde, dass ich mein gesamtes Bootstrapping in einer separaten Datei platziere und dann den Server bootstrap.
Was macht Bootstrap ?
Nun, es teilt alle Server-Initialisierungs-Setups in schöne Teile auf. Speziell
app.configure
)Schauen wir uns zum Beispiel die Routing- Datei an
Hier lade ich alle meine Modelle und Routen als Arrays von Dateien.
Haftungsausschluss:
readdirSync
ist nur in Ordnung, wenn er aufgerufen wird, bevor Sie den http-Server starten (vorher.listen
). Das Aufrufen synchroner Blockierungsaufrufe zur Serverstartzeit macht den Code nur lesbarer (es ist im Grunde ein Hack).Hier drücke ich socket.io, um die Autorisierung tatsächlich zu verwenden, anstatt Tom und Jack mit meinem socket.io-Server sprechen zu lassen
Hier beginne ich meine Routen, indem ich das entsprechende Modell an jedes aus der Routendatei zurückgegebene Routenobjekt übergebe.
Grundsätzlich geht es darum, dass Sie alles in nette kleine Module organisieren und dann einen Bootstrapping-Mechanismus haben.
Mein anderes Projekt (mein Blog) hat eine Init-Datei mit einer ähnlichen Struktur .
Haftungsausschluss: Der Blog ist kaputt und wird nicht erstellt. Ich arbeite daran.
quelle
Informationen zur wartbaren Routing-Organisation finden Sie in diesem Artikel zum Express-Routen-Scan- Knotenmodul . Dies ist die beste Lösung für mich.
quelle
Ich habe meine Apps auf dem Express-Generator-Tool aufgebaut. Sie können es installieren, indem Sie es
npm install express-generator -g
ausführen und mit ausführenexpress <APP_NAME>
.Um Ihnen eine Perspektive zu geben, sah eine der Strukturen meiner kleineren Anwendung folgendermaßen aus:
Eine coole Sache, die ich an dieser Struktur mag, die ich letztendlich für jede von mir entwickelte Expressanwendung übernehme, ist die Art und Weise, wie die Routen organisiert sind. Ich mochte es nicht, jede Routendatei in die app.js und
app.use()
jede Route benötigen zu müssen , besonders wenn die Datei größer wird. Daher fand ich es hilfreich, alle meineapp.use()
Dateien in einer ./routes/index.js-Datei zu gruppieren und zu zentralisieren .Am Ende wird meine app.js ungefähr so aussehen:
und meine ./routes/index.js sehen ungefähr so aus:
Ich kann dies einfach,
require(./users)
weil ich die Benutzerroute mit express.Router () geschrieben habe, wodurch ich mehrere Routen "gruppieren" und dann gleichzeitig exportieren kann, um die Anwendung modularer zu gestalten.Dies ist ein Beispiel dafür, was Sie auf meiner Route ./routers/users.js in Ordnung bringen würden:
Hoffentlich hat dies geholfen, Ihre Frage zu beantworten! Viel Glück!
quelle