Mongoose: No es una función ERROR - this.isModified no es una función

Creado en 18 sept. 2016  ·  11Comentarios  ·  Fuente: Automattic/mongoose

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?

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:

userSchema.pre('save',  function(done)  {
});

Todos 11 comentarios

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones