2016-02-11 29 views
6

我在一個Sequelize模型中有一個beforeCreate掛鉤(在User表中對密碼運行bcrypt),並且想要在種子文件中創建一個用戶。諸如bulkCreate之類的函數只是插入到數據庫中,因此不要調用任何鉤子(包括createdAt/updatedAt)。如何使用與播種機所需格式匹配的方式創建鉤子?如何在sequelize中bulkCreating時觸發beforeCreate鉤子?

好像很多人只是用sequelize-fixtures?這是要走的路嗎?或者我可以忽略種子格式,並使用標準的.create/.build和.save格式?

另外,與播種有關的文檔位於何處? Google的搜索在信息方面非常輕。

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

有關於這個選項here一些(但很少)文檔:

回答

5

bulkCreating時,如下設置individualHooks選項設置爲true。

此外,如果您允許用戶更改密碼,則還應該添加beforeUpdate掛鉤。您可以通過以下方式防止密碼被bcrypt處理兩次(當用戶的密碼以外的其他屬性被更新時):

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