运行 播种时续集模型挂钩
Run sequelize model hooks when seeding
我目前正在尝试使用 sequelize 为 postgresql 数据库播种,我在我的模型上声明了钩子,这些钩子在创建单独的记录(例如测试)时工作得很好
我的种子文件中的数据是否需要像最终文件中显示的那样table,或者我可以在创建时调用挂钩吗?
这是我的文件:
/*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
}
好吧,这是我的错误,我误解了 queryInterface.bulkInsert()
是如何工作的,我认为它在 "insert" 之前调用了模型挂钩(是的,这就是我误解的)它们在数据库中,它会插入您放入字符串中的原始数据,我认为这就是为什么在文档中使用 bulkCreate、bulkUpdate 等模型实例显示钩子的原因
我目前正在尝试使用 sequelize 为 postgresql 数据库播种,我在我的模型上声明了钩子,这些钩子在创建单独的记录(例如测试)时工作得很好
我的种子文件中的数据是否需要像最终文件中显示的那样table,或者我可以在创建时调用挂钩吗?
这是我的文件:
/*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
}
好吧,这是我的错误,我误解了 queryInterface.bulkInsert()
是如何工作的,我认为它在 "insert" 之前调用了模型挂钩(是的,这就是我误解的)它们在数据库中,它会插入您放入字符串中的原始数据,我认为这就是为什么在文档中使用 bulkCreate、bulkUpdate 等模型实例显示钩子的原因