Mongoose: Le crochet de pré-sauvegarde ne fournit pas de document

Créé le 2 sept. 2015  ·  3Commentaires  ·  Source: Automattic/mongoose

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é.

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 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) {}); .

Tous les 3 commentaires

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.

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