Mongoose: Хук предварительного сохранения не предоставляет документ

Созданный на 2 сент. 2015  ·  3Комментарии  ·  Источник: Automattic/mongoose

Возникла проблема с обработчиком pre save, где this должно выдавать мне сохраняемый документ, но вместо этого возвращает 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)

В чем может быть ошибка?
PS: Обычно сохраняется, когда предварительный крючок не используется.

Самый полезный комментарий

Толстая стрелка в ES6 связывает this с лексической областью видимости , что является просто причудливым способом сказать, что this внутри стрелочной функции то же самое, что и вне стрелочной функции. Вместо этого используйте User.pre('save', function(next) {}); .

Все 3 Комментарий

Толстая стрелка в ES6 связывает this с лексической областью видимости , что является просто причудливым способом сказать, что this внутри стрелочной функции то же самое, что и вне стрелочной функции. Вместо этого используйте User.pre('save', function(next) {}); .

Есть ли способ получить объект с помощью функции стрелки? Я бы использовал «функцию», но в проекте наложено руководство по стилю.

К сожалению, не atm, предварительные хуки явно полагаются на передачу документа через this а не как параметр. Толстые стрелки не работают с этой парадигмой.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги