Mongoose: 関数ではありませんエラー-this.isModifiedは関数ではありません

作成日 2016年09月18日  ·  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)  {
});

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矢印関数で同じ問題に悩まされていました。 どうもありがとうございました!

どうもありがとうございました

ありがとう、私も働いています。

このページは役に立ちましたか?
0 / 5 - 0 評価