【问题标题】:Hook 'beforeUpdate' in a sequelize model issue在续集模型问题中挂钩“更新前”
【发布时间】:2018-06-01 16:58:39
【问题描述】:

我正在使用 nodejs/express/sequelize 开发一个 API。

实际上,当我创建用户帐户时。由于 bcrypt,我得到了一个 Hook 'beforeCreate' 哈希用户密码:

User.hook('beforeCreate', (user) => {
if (user.password) {
  user.password = bcrypt.hashSync(user.password, bcrypt.genSaltSync(10), null);
}
});

user.password 是我注册时提供的密码。

这部分运行良好。

其次,我有一个更新此用户帐户的功能。从逻辑上讲,我添加了一个 'beforeUpdate' 引擎盖:

User.hook('beforeUpdate', (user) => {
console.log(user);
if (user.password) {
  user.password = bcrypt.hashSync(user.password, bcrypt.genSaltSync(10), null);
}
});

但我遇到了一个问题,因为user.password 不是我在 PATCH 请求中提供的数据,而是我数据库中的散列密码。

我猜是模型密码而不是实例密码……我不知道。 如果有人可以帮助我获取查询值,那就太好了。

【问题讨论】:

    标签: javascript node.js sequelize.js hook


    【解决方案1】:

    你可以使用_previousDataValues

    User.hook('beforeUpdate', (user) => {
    console.log(user);
    if (user.password) {
      user.password = bcrypt.hashSync(user.previous.password, bcrypt.genSaltSync(10), null);
    }
    });
    

    【讨论】:

    • 如果我使用previousDataValues,它说'无法读取未定义的属性密码'
    • 找到了!它是 dataValues* ;)
    • @Cupkek05 dataValues 和 _previousDataValues 不一样。 dataValues 是更新后的当前值。
    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2016-09-29
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多