2016-02-11 13 views
6

Mam hak beforeCreate w modelu Sequelize (uruchamia bcrypt na hasło w tabeli User) i chciałbym utworzyć użytkownika w pliku źródłowym. Funkcje takie jak bulkCreate wystarczy wstawić do bazy danych, a więc nie wywoływać żadnych haków (w tym createdAt/updatedAt). Jak utworzyć za pomocą haków wywoływanych w sposób odpowiadający formatowi wymaganemu przez siewnik?Jak mogę wyzwolić hook beforeCreate gdy bulkCreating w Sequelize?

Wygląda na to, że wielu z nich używa tylko sequelize-fixtures? Czy to jest droga? Czy mógłbym po prostu zignorować format początkowy i użyć standardowego formatu .create/.build i .save?

Ponadto, gdzie znajduje się dokumentacja dotycząca wysiewu? Wyszukiwania Google były dość lekkie pod względem informacji.

Odpowiedz

5

Ustaw opcję individualHooks true gdy bulkCreating, jak poniżej:

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

Jest trochę (ale niewiele) dokumentację o tej opcji here.

Ponadto, jeśli zezwalasz użytkownikom na zmianę haseł, dodaj także hak beforeUpdate. Możesz zapobiec przetwarzaniu hasła przez bcrypt dwa razy (gdy właściwości Użytkownika inne niż hasło są aktualizowane) w następujący sposób:

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