2017-01-01 2 views
2

Ich habe versucht, die Antwort auf diese Frage überall zu finden, aber es scheint, ich bin kein Glück.Mungo {strict: throw} wirft keinen Fehler

Ich habe ein sehr einfaches Modell Mungo

var userObject = { 
    profile: { 
     username: { 
      type: String, 
      required: true, 
      lowercase: true 
     }, 
     firstname: { 
      type: String, 
      required: true 
     }, 
     lastname: { 
      type: String, 
      required: true 
     }, 
     img: { 
      type: String, 
      required: true, 
      match: /^(https?:\/\/)/i 
     }, 
     email: { 
      type: String, 
      match: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/, 
      required: true 
     }, 
     singupdate: { 
      type: Date, 
      default: Date.now 
     } 
    } 
}; 

Und wenn ich das Schema erstellen wähle ich die Möglichkeit, einen Fehler zu werfen, wenn ich Eigenschaften nicht in dem Modell hinzufügen.

new mongoose.Schema(userObject, { strict: "throw" }); 

So habe ich versucht, den Fehler zu fangen. Wenn ich gültige Eigenschaften hinzufüge, wird der Prozess ausgeführt und ich erhalte die erstellten Dokumente. Wenn ich jedoch ungültige Eigenschaften hinzufüge, wird der Prozess nie beendet und die Protokolle werden nie auf der Konsole angezeigt.

try { 
    User.create(users, function(err, docs) { 
     console.log("err: " + err); 
     console.log("docs: " + docs); 
    }); 
} catch (e) { 
    console.log(e.message); 
} 

Was mache ich falsch?

Antwort

1

Wenn Sie Eigenschaften hinzufügen, die nicht Teil des Modells sind, von mongoose doc:

Die strenge Option (standardmäßig aktiviert), stellt sicher, dass an unser Modell Konstruktor übergeben Werte, die nicht angegeben wurden, in unserem Schema nicht erhält den db gespeichert

Es ist wie diese arbeiten auch mit strict:throw, so dass Sie sich nicht um zusätzliche Felder kümmern nicht im Modell verwiesen.

In Bezug auf die Ausnahme nicht ausgelöst, Aaron Heckmann spricht über dies in this post über, dass eine Ausnahme, die nicht auf einem save mit strict : throw ausgelöst wird:

Dieses eher ein Missverständnis, wie Mungo Werke ist. Die Option 'strict' ermöglicht die Validierung von Schlüsseln/Werten, die versucht werden, in der Datenbank zu speichern. Schemas erstellen Getter/Setter für Dokumentinstanzen , die auf die Methoden doc.{g,s}et() delegieren, die validiert sind. Anfügen adhoc Daten zu einem Mungo-Dokument Instanz löst nicht get/set() und als solche keine Validierung da es keine Weise, die Tag in der db gespeichert werden kann.

Da die zusätzlichen Felder nicht Teil des Modells sind, sie lösen keine solche, die Validierung so keine Ausnahme ausgelöst wird (und natürlich auch diese Felder nicht in der Datenbank gespeichert)

Ausnahmen wird geworfen Nur wenn Ihre Felder, die zum Modell gehören, diese Validierung nicht bestehen

+0

Gibt es eine Möglichkeit zu wissen, welche Felder nicht gespeichert wurden? – Leia

+1

Setzen Sie "erforderlich: wahr" auf Ihrem Feld in Ihrem Modell sicher, dass sie gespeichert werden, andernfalls sind sie nicht erforderlich, und wenn sie nicht Teil der Eingabe sind, wird sie nicht gemeldet –

Verwandte Themen