Mongoose: Ist keine Funktion FEHLER - this.isModified ist keine Funktion

Erstellt am 18. Sept. 2016  ·  11Kommentare  ·  Quelle: Automattic/mongoose

Wenn ich folgenden Code verwende:

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

Ich erhalte folgenden Fehler:

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)

Problem:

  • this ist kein Dokument, keine Abfrage oder kein Schema. Der Wert beträgt {}

Wie kann ich das lösen?

Hilfreichster Kommentar

Sie verwenden einen Pfeiloperator für den Rückruf, der den Gültigkeitsbereich von this ändert. Wenn Sie einen regulären Rückruf definieren, sollten Sie in Ordnung sein, zB:

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

Alle 11 Kommentare

Sie verwenden einen Pfeiloperator für den Rückruf, der den Gültigkeitsbereich von this ändert. Wenn Sie einen regulären Rückruf definieren, sollten Sie in Ordnung sein, zB:

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

In Ordnung. Danke. Es klappt.

Repariere deine eslintrc

Am Dienstag, den 29. November 2016 um 5:16 Uhr, Nick Rameau [email protected]
schrieb:

Gibt es eine Möglichkeit, dies mit Pfeilfunktionen zu tun? Ich verwende ES6 und mein
eslintrc beschwert sich über regelmäßige Rückrufe.


Sie erhalten dies, weil Sie diesen Thread abonniert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/Automattic/mongoose/issues/4537#issuecomment-263567210 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ABi5KbZG27HnF2sX2RwDIhTp4Rz1lIG_ks5rDCW1gaJpZM4J_8-c
.

Dieses Problem hatte ich auch. Danke für die Hilfe @VictorGerritsenQLVR!

Gibt es eine Möglichkeit, den Code so zu ändern, dass er den Pfeiloperator berücksichtigt, anstatt function(next) ?

@domarp-j Gute Frage. Ich dachte darüber nach und versuchte, es herauszufinden, aber mir fiel nichts Einfacheres ein, als einfach zu einer normalen Rückruffunktion zu wechseln. Vielleicht hat es ja jemand anders gemacht. Ich werde dieses Thema im Auge behalten.

Keine Möglichkeit, dies zu tun, fette Pfeile verwenden lexikalischen Geltungsbereich für den Kontext, kein Weg, um ihn zu umgehen.

hatte das gleiche problem, danke für die hilfe

Hallo, hatte das gleiche Problem mit der es6-Pfeilfunktion. Vielen Dank!

super danke

Danke , funktioniert bei mir auch.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen