2017-11-16 10 views
0

データベース全体をリセットし、すべてをシードするコードを設定したいと思います。Node.jsを使用してSequelizeのスケーラブルなシーディングを行いますか?

いくつかの外部キー制約では、シードは順番に発生する必要がありますが、依存しないシードは同時に非同期に発生する必要があります。

これらのシードを別々のファイルで適切に定義するにはどうすればよいですか?

答えて

0

module.exportsで約束をエクスポートすると問題が発生します。

プロミスを直接返すファイルが必要なときに、プロミスがすぐに呼び出されました。
プロミスを返す関数を返すことで問題を解決しました。

Resetting DB and seeding

const Seed = require('../seeds/index'); 

sequelize.sync({ force: true }).then(() => { 
    return Seed(); 
}).then(() => { 
    // DB reset 
}).catch(err => { 
    // Error in one of the seeds, specific error in 'err' 
}); 


seeds/index.js - 他のファイル中の種

const UserSeed = require('./user'); 
const BComponentSeed = require('./bcomponent'); 
const MaterialSeed = require('./material'); 

module.exports = function() { 
    return Promise.all([ // Returning and thus passing a Promise here 
     // Independent seeds first 
     UserSeed(), 
     BComponentSeed(), 
     MaterialSeed(), 
    ]).then(() => { 
     // More seeds that require IDs from the seeds above 
    }).then(() => { 
     console.log('********** Successfully seeded db **********'); 
    }); 
} 


seeds/user.jsを呼び出す - ユーザーの例を見ますthis GitHub issue

に対応しながらD

const User = require('../models/user'); 
const crypto = require('../globs/crypto'); 

module.exports = function() { 
    return User.bulkCreate([ // Returning and thus passing a Promise here 
     { 
      email: '[email protected]', 
      password: crypto.generateHash('john'), 
     }, 
     { 
      email: '[email protected]', 
      password: crypto.generateHash('a'), 
     }, 
    ]); 
}; 


はこの思い付きました

関連する問題