【问题标题】:How to create a method inside Sequelize Model?如何在 Sequelize Model 中创建方法?
【发布时间】:2023-03-09 13:28:01
【问题描述】:

我写了一个扩展模型的类,我需要创建一个方法来比较同步密码:

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;

钩子正在工作,我想在 beforeCreate a 之后添加:

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

使用这个类如何定义用户方法?

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案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)
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2020-08-25
      相关资源
      最近更新 更多