Sequelize 更改的功能不起作用 - 就像 Mongoose 的 isModified

Sequelize changed function not working - like Mongoose's isModified

在挂钩中我想在执行加密过程之前确认密码是否已更改。 Mongoose 有一个函数“isModified”,我相信 Sequelize 的“changed”函数也有同样的目的。

我无法使用“已更改”功能。我正在寻找如何使用它的示例。

*******代码片段

{
        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);
                },
        },
}

您必须使用挂钩 beforeUpdateprevious 函数。尝试这样的事情:

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);
  }
})();