javascript - 如何在 Sequelize 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);
}
}
使用此类我如何定义用户方法?
解决方案
我懂了:
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)
}
推荐阅读
- python - Drop_duplicates 无法删除完全匹配?
- javascript - JSLint - 在定义之前使用 EsLint - 未定义。[no-undef]
- facebook-graph-api - 获取 facebook 位置的个人资料图片
- python - 如何使用熊猫将月份名称和年份转换为日期时间
- python-3.x - 具有 2 个自变量的 Lmfit 最小化提供了不适当的结果
- wpf - UserControl 中的 ContentControl 导致异常
- python - 实例和类变量的实现
- r - 网页抓取多个页面问题
- r - 使用 Tidy 方法将列乘以 R 中的数字
- query-optimization - 雪花仓库选择