在Sequelize中bulkCreating时如何触发beforeCreate挂钩?

use*_*427 6 sequelize.js

beforeCreate在Sequelize模型中有一个钩子(在User表中的密码上运行bcrypt ),并且想在种子文件中创建一个用户.像bulkCreate这样的函数只是插入到数据库中,因此不要调用任何钩子(包括createdAt/ updatedAt).如何使用与播种器所需格式匹配的方式调用钩子?

似乎很多人只是在使用sequelize-fixtures?这是要走的路吗?或者我可以忽略种子格式,并使用标准的.create/.build和.save格式?

此外,与播种有关的文件在哪里?谷歌的搜索信息非常清晰.

ler*_*dev 6

individualHooksbulkCreating时将该选项设置为true,如下所示:

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

有一个关于这个选项的一些文件在这里.

此外,如果您允许用户更改密码,您也应该添加一个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);
  });
}
Run Code Online (Sandbox Code Playgroud)