Как создать метод внутри Sequelize Model?

#javascript #node.js #sequelize.js

#javascript #node.js #sequelize.js

Вопрос:

Я написал класс, который расширяет модель, и мне нужно создать метод для сравнения пароля синхронизации:

 const { Model, DataTypes } = require('sequelize');


class User extends Model {
  static init(sequelize) {
    super.init({
      username: DataTypes.STRING,
      password: DataTypes.STRING,
      role: DataTypes.STRING,
      status: DataTypes.INTEGER
    },
      {
        sequelize,
        hooks: {
          beforeCreate: (user) => {
            const salt = bcrypt.genSaltSync();
            user.password = bcrypt.hashSync(user.password, salt);
          }
        }   
      }
    )
  }

  static associate(model) {
    this.belongsToMany(models.Movie, { through: models.Ratings });
  }

}
module.exports = User;
 

Перехват работает, я подумал добавить after beforeCreate a:

  instanceMethods: {
      validPassword: function (password) {
        return bcrypt.compareSync(password, this.password);
      }
    }
 

Используя этот класс, как я могу определить пользовательский метод?

Ответ №1:

Я получил это:

 const { Model, DataTypes } = require('sequelize');
const bcrypt = require("bcrypt")

class User extends Model {
  static init(sequelize) {
    super.init({
      username: DataTypes.STRING,
      password: DataTypes.STRING,
      role: DataTypes.STRING,
      status: DataTypes.INTEGER
    },
      {
        sequelize,
        hooks: {
          beforeCreate: (user) => {
            const salt = bcrypt.genSaltSync();
            user.password = bcrypt.hashSync(user.password, salt);
          }
        }
      }
    )
  }

  static associate(model) {
    this.belongsToMany(models.Movie, { through: models.Ratings });
  }

  validPassword(password) {
    return bcrypt.compareSync(password, this.password);
  }
}
module.exports = User;
 

Если я хочу использовать метод внутри контроллера, например:

 const login = async (req, res) => {
    const { username, password } = req.params;
    const user = await User.findOne({
        where: { username }
    });

    if (!user) {
        return res.status(400).send("User not find!")
    }

    if(!user.validPassword(password)){..}
    res.send(user)

}