Sequelize.js?中是否有预保存钩子和示例方法
具体来说,我需要将这个Mongoose代码转换为等效的Sequelize代码:
架构
var userSchema = new mongoose.Schema({
username: { type: String, unique: true },
email: { type: String, unique: true },
password: String,
token: String
});
字符串
预保存
userSchema.pre('save', function(next) {
var user = this;
var hashContent = user.username + user.password + Date.now() + Math.random();
user.token = crypto.createHash('sha1').update(hashContent).digest('hex');
if (!user.isModified('password')) return next();
bcrypt.genSalt(5, function(err, salt) {
if (err) return next(err);
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) return next(err);
user.password = hash;
next();
});
});
});
型
示例方法
userSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if(err) return cb(err);
cb(null, isMatch);
});
};
型
3条答案
按热度按时间gupuwyp21#
最好的方法是使用类或示例方法扩展模型:
字符串
所以当你这样做
型
因此,要设置令牌,您可以这样做:
型
或者,使用comparePassword函数:
型
您可以在Sequelize文档中看到这一点
编辑
在最近的版本中,每个模型都有钩子,你可以检查hooks documentation,它非常简单,并用类或示例方法补充它们。
csga3l582#
我也遇到了同样的问题,但至少在2.0版本的sequelize中有这个功能,完整的文档可以在Hooks上找到。
下面是使用beforeValidate钩子的示例代码:
字符串
这里的要求是,使用smsBody和userId创建一个散列,所以我创建了hook。beforeValidate,此钩子将在Sequelize对模型执行任何验证之前执行。还有许多其他的钩子可用,最好的部分是你不必写任何额外的代码,而你保存你的数据,这些钩子将照顾。
您应该在钩子和instanceMethods之间明智地选择。但在你的情况下我想hooks会是更好的选择
vd8tlhqk3#
你在sequilize世界中寻找的是beforeCreate钩子。大概是这样的
字符串