2017-10-15 283 views
8

我有一个简单的用户模型如下:更新前似乎并没有被称为

'use strict'; 

let hashPassword = (user, options) => { 
    if (!user.changed('password')) { return; } 
    return require('bcrypt') 
     .hash(user.getDataValue('password'), 10) 
     .then(hash => user.setDataValue('password', hash)); 
}; 

module.exports = (sequelize, DataTypes) => { 
    const User = sequelize.define('User', { 
     username: {allowNull: false, type: DataTypes.STRING, unique: true}, 
     email: {allowNull: false, type: DataTypes.STRING, unique: true}, 
     password: {allowNull: false, type: DataTypes.STRING, unique: false}, 
    }, { 
     hooks: { 
      beforeCreate: hashPassword, 
      beforeUpdate: hashPassword 
     } 
    }); 
    return User; 
}; 

它工作得非常好用户创建,但beforeUpdate钩似乎不工作或叫,密码以纯文本形式保存在数据库中。

它从哪里来,它如何被固定?

回答

7

如何更新用户?获取用户实例并更新它并通过查询模型进行更新是有区别的。前者是实例更新,后者是批量更新操作(即使您的where过滤器将返回单个项目)。

这个区别很重要,因为beforeUpdateinstance hook所以它只会在实例更新时触发。您可以更改更新用户的方式,也可以实施beforeBulkUpdate挂钩。

+0

看起来你是对的,我使用'db.user.update(...,{where:{id:req.params.userId}});'。非常感谢你 – Magix

+1

很高兴我能提供帮助。如果我回答了您的问题,请标记为已接受。 –

+0

你可以发布示例代码,因为我找不到实际参数 –