2017-12-01 2 views
0

Ich habe eine Frage zu Validierungen in Mongoose-Modellen. Ich finde sie nicht so nützlich.Validierungen mit Mongoose-Modellen

Wenn ich ein neues Modell erschaffe, mein Code ist

const model = new Comment(commentJson); 
const error = model.validateSync(); 
assert.ok(error, error.errors); 

mit neuen Daten zu schaffen, die Validierung etwas nützlich ist. Aber bedenken Sie den Code beim Aktualisieren eines vorhandenen Modells.

Comment.findByIdAndUpdate(id, commentJson); 

Mit dem obigen Code habe ich keine Chance auf Modellvalidierung. Ich könnte das aktuelle Modell abrufen, es mit commentJson aktualisieren und dann eine Validierung für das Modell durchführen. Aber der Code sieht ein bisschen hässlich aus.

Stattdessen fühle ich mich mehr versucht, meine eigenen Behauptungen zu schreiben, anstatt mich auf die Mungo-Validierung zu verlassen. Gibt es eine Möglichkeit, Validierungen mit Mungo durchzuführen, ohne die Datenbank zweimal für Updates zu drücken? Vielen Dank.

+1

möglicherweise Pre-Update-Haken helfen – sidgate

Antwort

1

würde ich verwenden:

try { 
    let updatedComment = await Comment.findByIdAndUpdate(
    id, 
    commentJson, 
    { 
     new: true, 
     runValidators: true 
    } 
); 

    // Deal with result. 
    console.log(updatedComment); 
} catch (err) { 
    // Deal with error. 
    console.log(err); 
} 

Wenn Mongoose das Dokument aktualisiert er die Validierung gegen das Modell des Schema ausgeführt wird. Wenn die Validierung fehlschlägt, wird der catch-Block damit umgehen.

Oder mit Rückrufe, wenn Sie wollen:

Comment.findByIdAndUpdate(
    id, 
    commentJson, 
    { 
    new: true, 
    runValidators: true 
    }, (err, updatedComment) => { 
    if (err) throw err; 

    console.log(updatedComment); 
    } 
); 

Mongoose läuft in der Regel die automatisch Validatoren wenn save() und create() aufrufen. Ich glaube nicht, dass ich gesehen habe, dass viele Leute den Validator vorher manuell laufen lassen. Für die Update-Funktionen sind die Validatoren standardmäßig deaktiviert. Die Einstellung schaltet sie ein. Siehe here und here.

+0

Danke. Das ist wirklich nett. – vijayst