Cuando uso el siguiente código:
userSchema.pre('save', (done) => {
if(this.isModified('password')) {
bcrypt.hash(this.password, null, null, (err, hash) => {
if(err) return next(err);
this.password = hash;
this.updated_at = new Date().toISOString();
done();
});
} else {
return done();
}
});
Recibo el siguiente error:
TypeError: this.isModified is not a function
at model.userSchema.pre (C:\code\project\core\models\user.js:26:11)
at _next (C:\code\project\node_modules\hooks-fixed\hooks.js:62:30)
at fnWrapper (C:\code\project\node_modules\hooks-fixed\hooks.js:186:8)
at model.Object.defineProperty.value.fn (C:\code\project\node_modules\mongoose\lib\schema.js:221:11)
at _next (C:\code\project\node_modules\hooks-fixed\hooks.js:62:30)
at fnWrapper (C:\code\project\node_modules\hooks-fixed\hooks.js:186:8)
at C:\code\project\node_modules\mongoose\lib\schema.js:196:17
at C:\code\project\node_modules\kareem\index.js:127:16
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
Problema:
this
no es un Documento, Consulta o Esquema. Su valor es {}
¿Cómo puedo solucionar eso?
Está utilizando un operador de flecha para la devolución de llamada, que cambia el alcance de this
. Si define una devolución de llamada regular, debería estar bien, por ejemplo:
userSchema.pre('save', function(done) {
});
Está bien. Gracias. Funciona.
Arregla tu eslintrc
El martes 29 de noviembre de 2016 a las 5:16 a. m., Nick Rameau [email protected]
escribió:
¿Hay alguna manera de hacerlo con funciones de flecha? Estoy usando ES6 y mi
eslintrc se queja de las devoluciones de llamadas regulares.—
Estás recibiendo esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/Automattic/mongoose/issues/4537#issuecomment-263567210 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ABi5KbZG27HnF2sX2RwDIhTp4Rz1lIG_ks5rDCW1gaJpZM4J_8-c
.
Yo también tuve este problema. ¡Gracias por la ayuda @VictorGerritsenQLVR!
¿Hay alguna manera de cambiar el código para acomodar el operador de flecha, en lugar de usar function(next)
?
@ domarp-j Buena pregunta. Lo pensé y traté de resolverlo, pero no se me ocurrió nada más fácil que simplemente cambiar a una función de devolución de llamada regular. Tal vez alguien más lo haya hecho aunque. Estaré al pendiente de este tema.
No hay forma de hacerlo, las flechas gruesas usan el alcance léxico para el contexto, no hay forma de evitarlo.
tenia el mismo problema, gracias por la ayuda
Hola, estaba atascado en el mismo problema con la función de flecha es6. ¡Muchos gracias!
genial gracias
Gracias a mi tambien me sirve.
Comentario más útil
Está utilizando un operador de flecha para la devolución de llamada, que cambia el alcance de
this
. Si define una devolución de llamada regular, debería estar bien, por ejemplo: