播种时运行 sequelize 模型钩子
Posted
技术标签:
【中文标题】播种时运行 sequelize 模型钩子【英文标题】:Run sequelize model hooks when seeding 【发布时间】:2017-06-06 01:10:36 【问题描述】:我目前正在尝试使用 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, )
和
/*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
【问题讨论】:
【参考方案1】:好吧,这是我的错误,我误解了queryInterface.bulkInsert()
的工作原理,我认为它在“插入”之前调用了模型钩子(是的,这是我误解的)它们在数据库中,它插入原始数据你输入了字符串,我认为这就是为什么在文档中使用 bulkCreate、bulkUpdate 等的模型实例显示挂钩的原因
【讨论】:
以上是关于播种时运行 sequelize 模型钩子的主要内容,如果未能解决你的问题,请参考以下文章
使用 Typescript 在 Sequelize 模型中创建实例方法