Ответ 1
Метод экземпляра может использоваться для конкретных экземпляров элементов, например.
models.User.find(123).success( function( user ) {
user.setPassword('test');
});
Может кто-нибудь помочь мне понять, как использовать методы экземпляра в 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. Таким образом, функция остается в виде undefined, а вызов done() выполняет функцию undefined.
Вы можете исправить это тремя способами:
function () {}
done()
, если сделано.Альтернативой является рефакторинг, чтобы вернуть обещание, которое оно разрешило при завершении.