Mongoose: Это не функция ОШИБКА - this.isModified не является функцией

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

Когда я использую следующий код:

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

Я получаю следующую ошибку:

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)

Проблема:

  • this не является документом, запросом или схемой. Его стоимость {}

Как я могу это решить?

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

Вы используете оператор стрелки для обратного вызова, который изменяет область видимости this . Если вы определяете обычный обратный вызов, все должно быть в порядке, например:

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

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

Вы используете оператор стрелки для обратного вызова, который изменяет область видимости this . Если вы определяете обычный обратный вызов, все должно быть в порядке, например:

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

В порядке. Спасибо. Оно работает.

Исправьте свой eslintrc

Во вторник, 29 ноября 2016 г., в 5:16, Ник Рамо уведомления[email protected]
написал:

Есть ли способ сделать это с помощью стрелочных функций? Я использую ES6 и мой
eslintrc жалуется на регулярные обратные вызовы.


Вы получаете это, потому что подписаны на эту тему.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/Automattic/mongoose/issues/4537#issuecomment-263567210 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/ABi5KbZG27HnF2sX2RwDIhTp4Rz1lIG_ks5rDCW1gaJpZM4J_8-c
.

У меня тоже была эта проблема. Спасибо за помощь @VictorGerritsenQLVR!

Есть ли способ изменить код для размещения оператора стрелки вместо использования function(next) ?

@domarp-j Хороший вопрос. Я думал об этом и пытался разобраться, но не смог придумать ничего проще, чем просто переключиться на обычную функцию обратного вызова. Может быть, это сделал кто-то другой. Я буду следить за этим вопросом.

Ни в коем случае, толстые стрелки используют лексическую область видимости для контекста, и никак иначе.

была такая же проблема, спасибо за помощь

Привет, застрял на той же проблеме с функцией стрелки es6. Большое тебе спасибо!

большое спасибо тебе

Спасибо , у меня тоже работает.

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