2017-10-15 328 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

你可以發佈示例代碼,因爲我找不到實際參數 –