播种时运行 sequelize 模型挂钩

Oma*_*uez 5 postgresql orm node.js sequelize.js sequelize-cli

我目前正在尝试使用 sequelize 为 postgresql 数据库播种,我在我的模型上声明了钩子,在创建单独的记录(例如测试)时可以正常工作

我的种子文件中的数据是否需要在最终表格中显示,或者我可以在创建时调用钩子吗?

这是我的文件:

/*users-seed.js*/
'use strict'

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.bulkInsert('Users', [/*users-data*/])
  },
  down: function (queryInterface, Sequelize) {
    return queryInterface.bulkDelete('Users', null, {})
  }
}
Run Code Online (Sandbox Code Playgroud)

/*user.js*/
module.exports = function (sequelize, DataTypes) {
  let User = sequelize.define('User', {
    /* user attributes */
  }, {
      instanceMethods: {
        hashPassword: function (password) {
          return bcrypt.hash(password, 15)
        },
        hashEmail: function (email) {
          return crypto.createHash('sha256').update(email).digest('hex')
        }
      },
      hooks: {
        beforeCreate: function (user) {
          return user.hashPassword(user.password_digest).then(function (hashedPassword) {
            user.email = user.hashEmail(user.email)
            user.password_digest = hashedPassword
          }).catch(e => { console.log('e', e); throw new Error(e) })
        },
        beforeBulkCreate: function (users) {
          return users.forEach(function (user) {
           return user.hashPassword(user.password_digest).then(function (hashedPassword) {
              user.email = user.hashEmail(user.email)
              user.password_digest = hashedPassword
            }).catch(e => { console.log('e', e); throw new Error(e) })
         })
        }
      }
    })
  return User
}
Run Code Online (Sandbox Code Playgroud)

Oma*_*uez 3

好吧,这是我的一个错误,我误解了它的queryInterface.bulkInsert()工作原理,我认为它在数据库中“插入”(是的,这就是我误解的)它们之前调用了模型钩子,它插入了您放入字符串中的原始数据,我认为这就是为什么在文档中使用bulkCreate、bulkUpdate等使用模型实例显示钩子