Mongoose: Gancho de pré-salvamento não fornece documento

Criado em 2 set. 2015  ·  3Comentários  ·  Fonte: Automattic/mongoose

Há um problema com o gancho de pré-salvamento, em que 'this' deve mostrar o documento que está sendo salvo, mas fornece indefinido em vez disso.

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)

Qual poderia ser o erro?
PS: Salva normalmente quando o pré-gancho que está sendo usado não é usado.

Comentários muito úteis

A seta grande no ES6 vincula this ao escopo léxico , que é apenas uma maneira elegante de dizer que this dentro de uma função de seta é o mesmo que fora da função de seta. Use User.pre('save', function(next) {}); vez disso.

Todos 3 comentários

A seta grande no ES6 vincula this ao escopo léxico , que é apenas uma maneira elegante de dizer que this dentro de uma função de seta é o mesmo que fora da função de seta. Use User.pre('save', function(next) {}); vez disso.

Existe uma maneira de obter o objeto com a função de seta ?, Eu usaria a 'função', mas um guia de estilo é imposto no projeto.

Infelizmente, não atm, os pre hooks contam explicitamente com a passagem do documento por this vez de como um parâmetro. Flechas gordas não funcionam com este paradigma.

Esta página foi útil?
0 / 5 - 0 avaliações