Wie umgehen mit dem Aufruf sequelize.sync() zuerst?
Ich bin ein bisschen neu zu entwickeln, in nodejs, so ist dies wahrscheinlich ein einfaches problem. Ich Baue eine typische webapp basiert auf express + sequelize. Ich bin mit sqlite in-memory-da bin ich nur prototyping im moment. Ich verstehe, wenn ich eine dauerhafte Verwendung der sqlite-Datei, dies kann nicht ein problem sein, aber das ist nicht mein Ziel im moment. Betrachten Sie das folgende:
var User = sequelize.define("User", {
"username": DataTypes.STRING,
//etc, etc, etc
});
sequelize.sync();
User.build({
"username": "mykospark"
});
Zuerst, ich bekam eine Fehlermeldung auf Benutzer.build() über die Benutzer-Tabelle noch nicht existiert. Ich erkannte, dass sequelize.sync() aufgerufen wurde, async, und die legen Los war, bevor die Tabelle erstellt wurde. Ich habe dann neu arrangiert mein code, so dass die Benutzer.build () - Aufruf wurde innerhalb der sequelize.sync().vollständige (), die das problem behebt, aber ich bin mir nicht sicher, wie Sie dies für den rest von meinem Projekt.
Mein Projekt verwendet Modelle in einer Reihe von verschiedenen Orten. Es ist mein Verständnis, dass ich wollen einfach nur zu rufen, sequelize.sync() einmal nach meiner Modelle definiert sind, dann werden Sie frei verwendet werden können. Ich könnte wahrscheinlich einen Weg finden, um zu blockieren die gesamte nodejs-app bis sequelize.sync() beendet, aber das bedeutet nicht scheinen, wie eine gute form. Ich glaube, ich könnte wickeln jedes einzelne Modell der Betrieb in eine sequelize.sync().vollständige () - Aufruf, aber das scheint nicht richtig.
So, wie die Menschen in der Regel befassen sich mit diese?
- Die sequelize express Beispiel-app (sequelizejs.com/articles/express#app-js) ist es genau so wie Sie es sagten. Es hält die gesamte app bis sequelize synchronisiert ist. So definieren Sie Ihre Modelle, sync sequelize, laden Sie Ihre Daten und starten Sie Ihre app. Verwenden async.js wenn Sie in callbackhell. (oder finden Sie unter callbackhell.com)
- Verwenden Sie einfach
sync()
auf Start, wenn dabei ein web-server, wenn mit einmal-Skripte legen Sie alle Anrufe innerhalb der callback-Synchronisation(). - Ich kann nicht glauben, ich vermisste, dass ein Teil der Dokumentation. Ich habe mit den Beispielen, die helfen mir, aber das Besondere detail entging mir. Ich denke, das ist eine faire Lösung.
- bitte akzeptieren Sie die Antwort, die Sie denken, am besten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre .sync () - Aufruf sollte aufgerufen werden, sobald in Ihrem app.js Datei. Allerdings müssen Sie möglicherweise zusätzliche Anrufe, wenn Sie verwalten Sie mehrere Datenbanken in einem server. In der Regel Ihre
.sync()
Anruf wird in Ihrem Datei-server und dievar User = sequelize.define("ModelName"...
werden in Ihrer models/modelName.js Datei. Sequelize schlägt vor, dass diese Art der Anleitung "erstellen eines wartbaren Anwendung, wo die Datenbank-Logik werden in den Modelle-Ordner". Dies wird Ihnen helfen, wie Ihre Entwicklung wächst. Später in der Antwort, ich werde bieten eine einfache Schritt-Folgen für die Initialisierung der Struktur der Datei.Also für Ihren Fall, Sie hätte app.js, models/index.js und models/users.js. Wo app.js wäre Ihre server mit
.sync()
Methode. In den Modelle-Ordner, den Sie über die erforderliche index.js Ordner, in dem Sie konfigurieren eine Anbindung an die Datenbank und sammeln Sie alle der Modell Definitionen. Schließlich haben Sie Ihr user.js Dateien, wo Sie fügen Sie Ihre Modell mit Klasse und Instanz-Methoden. Unten ist ein Beispiel der models/user.js Datei, die Sie hilfreich finden könnte.user.js
models/index.js --> Siehe hier
BEARBEITEN 03/14/17
Nun die beste option, um Ihre setup-Knoten-app mit sequelize ist die Verwendung sequelize-cli. Dies ist sequelize Migrationen und hat sehr nützliche Funktionen in Entwicklung und Produktion-Umgebungen. Für den Inhalt dieser Frage und der revision auf die Antwort, der beste Ansatz ist der folgende:
Verwenden
npm install sequelize-cli -g
wenn Sie wollen, dass es Global installiert.Dann initialisieren sequelize Migrationen:
Installieren, sollte es die folgenden Ordner und Dateien-Struktur in den Ordner, den Sie die das Kommando initiiert hat:
Wenn Sie möchten, ein Modell zu erstellen, führen Sie den folgenden Befehl, und es wird automatisch erstellen Sie die Datei-Struktur für Sie. Hier ist ein Beispiel
sequelize model:create --name User --attributes "user:string email:string"
Als Nächstes sollten Sie in der Lage sein zu sehen, das neue Modell
page
im models/page.js.Müssen Sie dann gehen Sie in die models/index.js und definieren Sie Ihre neue Modell für Ihre Datenbank auf den richtigen Pfad für das Modell. Hier ist ein Beispiel:
models/index.js
Wenn Sie brauchen, um änderungen am Modell können Sie gehen in die Wanderungen Ordner und hinzufügen von Methoden. Folgen Sie den sequelize migration docs hier. Nun, über die app.js server. Bevor Sie Ihren server, müssen Sie initialisieren Ihre Datenbanken. Ich verwende Folgendes script zum initialisieren der Datenbank vor dem ausführen des server-setup eine postgres-db:
postgresInit.sh
Wenn Sie lieber eine javascript-Lösung, es ist ein SO Lösung hier
app.js