2016-02-11 140 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); 
    }); 
} 
相关问题