Il y a un problème avec le hook de pré-sauvegarde où 'ceci' devrait me donner le document en cours d'enregistrement mais il donne à la place undefined.
import mongo from 'mongoose'
import crypt from 'bcryptjs'
const User = new mongo.Schema({
username: {type: String, unique: true, required: true},
password: {type: String, select: false, required: true}
// token: {type: String}
})
//
User.pre('save', (next) => {
console.log(this);
if (this.isModified('password') || this.isNew) {
crypt.genSalt(10, (err, salt) => {
if (err) {
next(err)
} else {
crypt.hash(user.password, salt, (err, hash) => {
if (err) {
next(err)
} else {
user.password = hash
next()
}
})
}
})
} else {
next()
}
})
export default mongo.model('User', User)
Quelle peut être l'erreur ?
PS: Il enregistre normalement lorsque le pré-crochet n'est pas utilisé.
La grosse flèche dans ES6 lie this
à la portée lexicale , ce qui est juste une façon élégante de dire que this
intérieur d'une fonction flèche est le même qu'à l'extérieur de la fonction flèche. Utilisez plutôt User.pre('save', function(next) {});
.
Existe-t-il un moyen d'obtenir l'objet avec la fonction flèche ?, j'utiliserais la 'fonction' mais un style guide est imposé dans le projet.
Malheureusement pas atm, les pré-hooks reposent explicitement sur le passage du document via this
plutôt que comme paramètre. Les grosses flèches ne fonctionneront pas avec ce paradigme.
Commentaire le plus utile
La grosse flèche dans ES6 lie
this
à la portée lexicale , ce qui est juste une façon élégante de dire quethis
intérieur d'une fonction flèche est le même qu'à l'extérieur de la fonction flèche. Utilisez plutôtUser.pre('save', function(next) {});
.