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.
InformationsquelleAutor mykospark | 2014-06-26
Schreibe einen Kommentar