Mongoose: El gancho de guardado previo no proporciona el documento

Creado en 2 sept. 2015  ·  3Comentarios  ·  Fuente: Automattic/mongoose

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.

Comentario más útil

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.

Todos 3 comentarios

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.

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