使用 Sequelize 将对象传递到钩子中

Orw*_*erg 2 sql-server node.js sequelize.js

我正在使用 Sequelize 作为我的节点应用程序的数据库 (SQL Server) 交互工具。我想创建一个在表有更新/交互时运行的钩子,为了解决这个问题,我将调用该表“用户”。我选择使用的钩子是 Sequelize 的“afterBulkUpdate”。

我在“用户”模型的定义中定义了该钩子。我已经验证当“用户”更新时钩子会触发。但是,我想要做的是将已更新的单个“User”传递给“afterBulkUpdate”挂钩。我的应用程序被分解为 MVC 架构,实际调用 UserService 内的 Sequelize 的“.update”,而钩子是在用户模型中定义的。在这两层之间是实际数据丢失的地方。

TLDR:如果我将我的 User 对象更新为 {"name":"fred","desc":"updated"}。当更新函数没有调用钩子的行(我可以看到)时,如何将其传递给我的 Sequelize 钩子?

示例代码:
我的 Hook 定义:

hooks: 
  afterBulkUpdate: (user, options) ->
    console.log "Do something with the actual data here"
Run Code Online (Sandbox Code Playgroud)

我的 User.Update 定义:

  update: (user) ->
new Promise (resolve, reject) ->
  User.update(
    user
    where:
      name: user.name
      )
  .then (res) ->
    resolve res
  .catch (err) ->
    reject err
Run Code Online (Sandbox Code Playgroud)

Jan*_*ier 6

钩子接收所有相同的选项update:

User.update(user, { where ..., user: user })
Run Code Online (Sandbox Code Playgroud)

在您的钩子中,您将可以访问options.user. 这些值也应该已经在此处可用.attributes

另一方面,所有的sequelize方法都已经返回一个promise,所以不需要包装它。