Когда я использую следующий код:
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) {
});
В порядке. Спасибо. Оно работает.
Исправьте свой 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. Большое тебе спасибо!
большое спасибо тебе
Спасибо , у меня тоже работает.
Самый полезный комментарий
Вы используете оператор стрелки для обратного вызова, который изменяет область видимости
this
. Если вы определяете обычный обратный вызов, все должно быть в порядке, например: