我想在我的用户模型上的 afterCreate 上创建一个sequelize挂钩。当我只创建一个没有事务的用户时,它工作得很好。但是如果我在事务中运行我的create语句,那么钩子就会在提交之前运行。
用户模型挂钩
hooks: {
afterCreate: userModule.NewUserHook,
afterBulkCreate: userModule.NewUserHook
}
钩子功能
NewUserHook: function NewUserHook(user, options){
console.log('Inside hook');
}
该事务在options.transaction中是可访问的。
在提交事务后是否仍然运行挂钩?
答案 0 :(得分:3)
游戏有点晚,但是因为我在搜索答案时遇到了这个问题,这个问题可能对其他人有用。
如果在事务中创建用户,那么事务对象将在钩子回调的一个参数中传递(取决于版本)。 Link to docs。 以下内容直接从源链接复制:
// Here we use the promise-style of async hooks rather than
// the callback.
User.hook('afterCreate', (user, options) => {
// 'transaction' will be available in options.transaction
// This operation will be part of the same transaction as the
// original User.create call.
return User.update({
mood: 'sad'
}, {
where: {
id: user.id
},
transaction: options.transaction
});
});
sequelize.transaction(transaction => {
User.create({
username: 'someguy',
mood: 'happy',
transaction
});
如果我们在前面的代码中没有在我们对
User.update
的调用中包含事务选项,则不会发生任何更改,因为在提交挂起事务之前,我们新创建的用户不存在于数据库中。