Quelqu'un peut-il m'aider à comprendre comment utiliser des méthodes d'instance dans la séquelle? J'ai examiné la documentation mais j'ai trouvé qu'il était rare. À l'heure actuelle, j'essaie d'utiliser des méthodes d'instance SetPassword et Verifypassword sur mon modèle utilisateur. Lorsque j'essaie d'appeler le code dans la RÉPL, après avoir importé le modèle utilisateur et synchronisé la DB, je reçois ce qui suit:
> models.User.setPassword('test');
TypeError: Object [object Object] has no method 'setPassword'
Voici le code du modèle utilisateur:
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);
});
}
}
});
};
La méthode d'instance peut être utilisée sur des instances d'éléments spécifiques, par exemple.
models.User.find(123).success( function( user ) {
user.setPassword('test');
});
Vous définissez la fonction comme suit: function(password, done)
Pourtant, vous ne fournissez pas le paramètre fait. Ainsi, la fonction se laisse effectuée comme non définie et appelée terminée () exécute une fonction non définie.
Vous pouvez résoudre ce problème de 3 manières:
function () {}
done()
si c'est fini est définiL'alternative est de le refroidir pour retourner une promesse qu'il résout la finalité.