2017-05-11 2 views
0

Ich versuche, beim Starten einer Knoten-App zu folgen. Ich muss mein DB-Objekt zu anderen Modulen exportieren, also muss ich db exportieren.Knex migrieren zuletzt programmgesteuert

Das Problem ist, dass der Migrationscode einen Fehler verursacht, aber wegen der asynchronen Natur von nodejs wurde db config bereits exportiert. Ich möchte den folgenden Code synchronisieren, damit der Export nur nach Abschluss der Migration erfolgt.

Der umgekehrte Weg kann sein, db Initialisierung aus Migration Teil, aber ich möchte die Anwendung herunterfahren, wenn die Migration fehlschlägt.

Antwort

0

Es ist nicht möglich, den Export eines Moduls zu verzögern.

Wenn Sie bei einem Fehler beenden möchten, können Sie einfach process.exit() im catch Block hinzufügen.

Allerdings würde ich vorschlagen, dass Sie eine Initialisierung "Wache" in Ihrer Hauptdatei hinzufügen. Was ich mache, ist der gesamte Initialisierungscode, der ausgeführt werden muss, bevor die Anwendung startet, in einer Funktion, die Promise zurückgibt (oder einen Rückruf nimmt), diese Funktion in meine Hauptdatei importieren und nur den Rest der Anwendung importieren gelingt es.

Beispiel:

Init.js:

main.js:

const init = require('./init.js'); 

init.initialize(function (error) { 
    if (error) console.log("Initialization failed with error: " + error.toString()); 
    else { 
     const file1 = require('./file1.js'); 
     const file2 = require('./file2.js'); 
     // Import the rest of the application... 
    } 
}); 

Wenn Sie jetzt db in file1.js importieren und file2.js Sie können sicher sein, dass die Initialisierung und Migration ist gelungen.