Sequelize hook取决于交易

时间:2016-01-26 13:15:22

标签: node.js transactions hook sequelize.js

我想在我的用户模型上的 afterCreate 上创建一个sequelize挂钩。当我只创建一个没有事务的用户时,它工作得很好。但是如果我在事务中运行我的create语句,那么钩子就会在提交之前运行。

用户模型挂钩

hooks: {
    afterCreate: userModule.NewUserHook,
    afterBulkCreate: userModule.NewUserHook
}

钩子功能

NewUserHook: function NewUserHook(user, options){
    console.log('Inside hook');
}

该事务在options.transaction中是可访问的。

在提交事务后是否仍然运行挂钩?

1 个答案:

答案 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的调用中包含事务选项,则不会发生任何更改,因为在提交挂起事务之前,我们新创建的用户不存在于数据库中。

相关问题