繁体   English   中英

如何在 Sequelize Model 中创建方法?

[英]How to create a method inside Sequelize Model?

我写了一个 class 扩展了 Model,我需要创建一个方法来比较同步密码:

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 之后添加:

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

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

我懂了:

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;

如果我想使用 controller 中的方法,例如:

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)

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM