次のコードを使用する場合:
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) {
});
Ok。 ありがとう。 できます。
eslintrcを修正する
5:16の火、2016年11月29日には、ニック・ラモー[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
スコープが変更されます。 通常のコールバックを定義する場合は、問題ないはずです。例: