Da der MongoDB-Datenbankzugriff und die Initialisierung auf Node.js asynchron sind, möchte ich ein Modul pro Sammlung definieren, das nach der Db-Initialisierung umbrochene db-Aufrufe exportiert.
Ein solches "Cars.model.js" Modul sieht so aus:
%Vor%, damit andere Module ausgeführt werden können:
%Vor% Es ist mir passiert, dass getCars
nicht definiert war, weil der Datenbankzugriff zum Zeitpunkt der Ausführung meines zweiten Moduls noch nicht initialisiert war.
Wie gehen Sie mit der Erstellung solcher asynchroner db-Modelle um?
Sie können nicht in exports
schreiben, nachdem Sie die Datei verlassen haben. Sie müssen blockieren. Um das Blockieren zu vermeiden, würde ich das laue Laden von Ressourcen verwenden.
Verwenden Sie Ereignisemitter, um das verzögerte Laden zu emulieren. Möglicherweise möchten Sie auf eine LazyLoadedCollection
-Klasse / -Objekt verallgemeinern, um den Code sauberer / mehr DRY zu machen.
Ich glaube, dass diese einfache Lösung funktioniert: Ersetzen Sie den asynchronen Aufruf von getCars()
durch einen synchronen Aufruf an einen Sammlungscache, der vor Modellen aufgerufen werden soll.
Das main.js-Startmodul für Anwendungen:
%Vor%So würde "Cars.model.js" so aussehen:
%Vor%Diese Lösung verschiebt das asynchrone Problem von Modellen in das Stammdatenbankmodell, wodurch Modelle einfacher zu entwickeln sind.
Tags und Links model-view-controller design-patterns node.js asynchronous mongodb