在一个钩子(Hook)中,我想在执行加密过程之前确认密码是否已更改。
Mongoose 有一个功能“isModified”,我相信 Sequelize 的“更改”功能服务器的目的相同。
我无法让“更改”功能工作。我正在寻找一个如何使用它的例子。
*******代码片段
{
hooks: {
beforeCreate: async (user) => {
if (changed([user.password]) === false) return next();
const salt = await bcrypt.genSalt(12);
user.password = await bcrypt.hash(user.password, salt);
user.passwordConfirmed = undefined;
},
},
instanceMethods: {
validPassword: function (password) {
return bcrypt.compare(password, this.password);
},
},
}
最佳答案
您必须使用 Hook beforeUpdate
与 previous
功能。尝试这样的事情:
let { Sequelize, DataTypes } = require('sequelize');
let sequelize = new Sequelize({
dialect: 'sqlite',
storage: 'database.sqlite',
});
(async () => {
try {
await sequelize.authenticate();
console.log('connected');
let Person = sequelize.define('Person', { name: DataTypes.STRING, age: DataTypes.INTEGER });
Person.addHook('beforeUpdate', (person) => {
if (person.previous('name') != person.name) {
console.log('name changed', person.previous('name'), person.name);
}
});
await Person.sync({ force: true });
await Person.create({ name: 'John', age: 30 });
let [person] = await Person.findAll();
person.name = 'Paul';
await person.save();
} catch (error) {
console.error('Unable to connect to the database:', error);
}
})();
关于node.js - Sequelize changed 功能不起作用 - 就像 Mongoose 的 isModified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63492830/