【问题标题】:Pass Object into hook using Sequelize使用 Sequelize 将对象传递给钩子
【发布时间】:2016-11-10 11:23:10
【问题描述】:

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

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

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

示例代码:
我的 Hook 定义:

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

我的 User.Update 定义:

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

【问题讨论】:

    标签: sql-server node.js sequelize.js


    【解决方案1】:

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

    User.update(user, { where ..., user: user })
    

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

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

    【讨论】:

    • 谢谢!就我而言,我最终从“用户”那里获得了属性,而没有预先修复“选项”。所以我最终得到了这样的结果:afterBulkUpdate: (user, options) -> result = JSON.stringify(user.attributes) console.log result
    • 支持这个用例吗? Sequelize 文档似乎不支持通过选项对象传递上下文:docs.sequelizejs.com/class/lib/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2020-07-01
    • 2019-11-05
    • 2020-12-30
    相关资源
    最近更新 更多