2016-02-11 5 views
6

Ho un hook beforeCreate in un modello Sequelize (esegue bcrypt sulla password in una tabella User) e vorrei creare un utente nel file seme. Funzioni come bulkCreate si inseriscono semplicemente nel database e quindi non chiamano alcun hook (incluso lo createdAt/updatedAt). Come posso creare con i ganci chiamati in un modo che corrisponda al formato richiesto dalla seminatrice?Come posso attivare il hook beforeCreate quando bulkCreating in Sequelize?

Sembra che molti stiano usando solo sequelize-fixtures? È questa la strada da percorrere? O potrei semplicemente ignorare il formato seme e usare il formato standard .create/.build e .save?

Inoltre, dove si trova la documentazione relativa alla semina? Le ricerche di Google sono state piuttosto leggere in termini di informazioni.

risposta

5

Impostare l'opzione individualHooks al vero quando bulkCreating, come di seguito:

User.bulkCreate(users, {individualHooks: true}).then(function() { 
    console.log("Done!"); 
}); 

C'è un po '(ma poco) la documentazione su questa opzione here.

Inoltre, se si consente agli utenti di modificare le password, è necessario aggiungere anche un hook beforeUpdate. È possibile impedire che la password venga elaborata da bcrypt due volte (quando le proprietà dell'Utente diverse dalla password vengono aggiornate) nel modo seguente:

function hashPassword(user, options, fn) { 
    //Don't hash if password is already hashed 
    if (user.dataValues.password.indexOf('$2a$') === 0) { 
    fn(null, user); 
    return; 
    } 

    bcrypt.hash(user.password, 10, function(err, hash) { 
    if (err) { 
     console.log('Error while generating hash!'); 
     fn(err, null); 
     return; 
    } 
    user.password = hash; 
    fn(null, user); 
    }); 
}