Mongoose: N'est pas une ERREUR de fonction - this.isModified n'est pas une fonction

Créé le 18 sept. 2016  ·  11Commentaires  ·  Source: Automattic/mongoose

Quand j'utilise le code suivant :

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();
  }
});

Je reçois l'erreur suivante :

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)

Problème:

  • this n'est pas un document, une requête ou un schéma. Sa valeur est de {}

Comment puis-je résoudre cela?

Commentaire le plus utile

Vous utilisez un opérateur de flèche pour le rappel, ce qui modifie la portée de this . Si vous définissez un rappel régulier, tout devrait bien se passer, par exemple :

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

Tous les 11 commentaires

Vous utilisez un opérateur de flèche pour le rappel, ce qui modifie la portée de this . Si vous définissez un rappel régulier, tout devrait bien se passer, par exemple :

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

D'accord. Merci. Ça marche.

Réparez votre eslintrc

Le mar 29 novembre 2016 à 5h16, Nick Rameau [email protected]
a écrit:

Existe-t-il un moyen de le faire avec les fonctions fléchées? J'utilise ES6 et mon
eslintrc se plaint des rappels réguliers.

-
Vous recevez ceci parce que vous êtes abonné à ce fil.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/Automattic/mongoose/issues/4537#issuecomment-263567210 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ABi5KbZG27HnF2sX2RwDIhTp4Rz1lIG_ks5rDCW1gaJpZM4J_8-c
.

J'ai eu ce problème aussi. Merci pour l'aide @VictorGerritsenQLVR !

Existe-t-il un moyen de modifier le code pour s'adapter à l'opérateur flèche, plutôt que d'utiliser function(next) ?

@domarp-j Bonne question. J'y ai pensé et j'ai essayé de le comprendre, mais je n'ai rien trouvé de plus simple que de simplement passer à une fonction de rappel régulière. Peut-être que quelqu'un d'autre l'a fait. Je vais garder un œil sur ce problème.

Pas moyen de le faire, les grosses flèches utilisent une portée lexicale pour le contexte, aucun moyen de le contourner.

eu le même problème, merci pour l'aide

Salut, j'ai été bloqué sur le même problème avec la fonction flèche es6. Merci beaucoup!

super merci

Merci , ça marche pour moi aussi.

Cette page vous a été utile?
0 / 5 - 0 notes