[英]Using Instance Methods in Sequelize
有人可以幫我理解如何在Sequelize中使用實例方法嗎? 我已經查看了文檔,但發現它很稀疏。 目前,我正在嘗試在我的用戶模型上使用setPassword和verifyPassword實例方法。 當我嘗試在REPL中調用代碼時,在導入用戶模型並同步數據庫之后,我得到以下內容:
> models.User.setPassword('test');
TypeError: Object [object Object] has no method 'setPassword'
以下是用戶模型的代碼:
var bcrypt = require('bcrypt');
module.exports = function(sequelize, DataTypes) {
return sequelize.define('User', {
email: { type: DataTypes.STRING, unique: true, allowNull: false, validate: { isEmail: true } },
password: { type: DataTypes.STRING, allowNull: false},
firstName: {type: DataTypes.STRING},
lastName: {type: DataTypes.STRING},
companyName: {type: DataTypes.STRING},
admin: {type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false,},
forgotUrl: {type: DataTypes.STRING, unique: true},
forgotDate: {type: DataTypes.STRING},
lastLogin: {
type: DataTypes.DATE,
defaultValue: DataTypes.NOW
}
}, {
paranoid: true,
instanceMethods: {
setPassword: function(password, done) {
return bcrypt.genSalt(10, function(err, salt) {
return bcrypt.hash(password, salt, function(error, encrypted) {
this.password = encrypted;
this.salt = salt;
return done();
});
});
},
verifyPassword: function(password, done) {
return bcrypt.compare(password, this.password, function(err, res) {
return done(err, res);
});
}
}
});
};
實例方法可以用於特定元素實例,例如。
models.User.find(123).success( function( user ) {
user.setPassword('test');
});
您將函數定義為: function(password, done)
但是你沒有提供done參數。 因此,函數將作為未定義完成,並且調用done()正在執行未定義的函數。
您可以通過3種方式解決此問題:
function () {}
done()
另一種方法是重構它以返回它在完成時解析的承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.