Hay un problema con el gancho de guardado previo en el que 'esto' debería darme el documento que se está guardando, pero en su lugar da 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)
¿Cuál podría ser el error?
PD: Se guarda normalmente cuando no se usa el pre-gancho.
La flecha gruesa en ES6 vincula this
al ámbito léxico , que es solo una forma elegante de decir que this
dentro de una función de flecha es lo mismo que fuera de la función de flecha. Utilice User.pre('save', function(next) {});
lugar.
¿Hay alguna forma de obtener el objeto con la función de flecha ?, yo usaría la 'función' pero se impone una guía de estilo en el proyecto.
Desafortunadamente no atm, los pre hooks dependen explícitamente de pasar el documento a través de this
lugar de como un parámetro. Las flechas gordas no funcionarán con este paradigma.
Comentario más útil
La flecha gruesa en ES6 vincula
this
al ámbito léxico , que es solo una forma elegante de decir quethis
dentro de una función de flecha es lo mismo que fuera de la función de flecha. UtiliceUser.pre('save', function(next) {});
lugar.