2017-05-11 7 views
0

ノードアプリケーションを起動するときに次のようなことをしようとしています。 dbオブジェクトを他のモジュールにエクスポートする必要があるので、dbをエクスポートする必要があります。Knexがプログラムで最新のものに移行する

問題は移行コードによってエラーが発生する可能性がありますが、nodejsの非同期性のためにdb configがすでにエクスポートされています。私は次のコードを同期しようとしているので、移行が完了した場合にのみエクスポートが行われます。

これ以外の方法は、移行部分からの抽象的なdbの初期化ですが、移行が失敗した場合は、アプリケーションをシャットダウンする必要があります。

/* 
    1. Db init 
    2. Migration stuff 
*/ 
const db = knex(config); 
(async() => { 
try { 
    const migrate = async() => db.migrate.latest(); 
    await migrate(); 
} catch(ex) { 
    console.log('Error migrating: ', ex); 
} 
})(); 

module.exports = db; 

答えて

0

モジュールのエクスポートを遅延することはできません。

エラーで終了したい場合はprocess.exit()catchブロックに簡単に追加できます。

ただし、メインファイルに初期化「ガード」を追加することをお勧めします。私がやることは、Promise(またはコールバックを返す)を返す関数でアプリケーションを開始する前に完了する必要があるすべての初期化コードを入れ、メインファイルでこの関数をインポートし、一度アプリケーションの残りの部分をインポートするだけです成功する。

例:

init.js:

main.js:今、あなたは、あなたは確認することができますfile2.jsfile1.jsdbをインポートしたときに

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... 
    } 
}); 

その初期化と移行成功しました。

関連する問題