2016-07-07 4 views
3

Mungo ist Definition meines Schemas folgend:Wie Prüfungsfehler geltend zu machen, wenn es zusätzliche Felder in NodeJS sind und

var mongoose  = require('mongoose'); 
var Schema  = mongoose.Schema; 

var StudentSchema = new Schema({ 
    name: String, 
    family: String 
}, {strict: 'throw' }); 

module.exports = mongoose.model('Student', StudentSchema); 

Jetzt, während ein POST-Anruf tätigt, wenn ich zusätzliche Felder hinzufügen, andere als name und family, die zusätzlichen Felder werden korrekt ignoriert, aber das Dokument bleibt in mongodb bestehen. Wie kann ich in solchen Fällen einen Validierungsfehler auslösen?

Controller-Code:

try { 
     bird.save(function (err) { 
      if (err) { 
       res.statusCode = 404; 
       return res.send({message: err}); 
      } 

      res.json({message: 'Student created!'}); 
     }); 
    } 
    catch (e) { 
     console.log("error"); 
     callback(e); 
    } 

Wenn ich die folgende Nutzlast passieren, bleibt es in mongoDB:

{ 
    "name": "name1", 
    "family": "family1", 
    "dummy": "dummy" 
} 

Idealerweise, da es ein zusätzliches Feld hat dummy, ich will Validierungsfehler werfen.

+0

@JohnnyHK: Ich habe die Frage mit den erforderlichen Angaben aktualisiert. – Vraj

Antwort

0

können Sie pre-save validation verwenden, aber Mungo ignoriert die zusätzlichen Felder

Sie können auch tun:

var student = new Student({ 

        name:req.body.name, 
        family:req.body.family 

        }); 

student.save(callback); 
+0

Ich möchte einen Validierungsfehler im Falle von zusätzlichen Feldern werfen. Wie wird das helfen? Ich weiß, Mongoose ignoriert zusätzliche Felder – Vraj

0

Sie die strict Option des Schemas auf 'throw' festlegen, eine Ausnahme verursachen geworfen werden, wenn Felder außerhalb dessen, was im Schema definiert ist vorhanden sind, wenn sie ein neues Dokument zu erstellen:

var StudentSchema = new Schema({ 
    name: String, 
    family: String 
}, { strict: 'throw' }); 

Aber es ist eine Ausnahme, kein Validierungsfehler, so dass Sie try/catch verwenden müssen, es zu handhaben:

try { 
    Student.create(req.body, callback); 
} 
catch (e) { 
    callback(e); 
} 
+0

Dies funktioniert nicht. Scheint so, als ob es nicht mit der neuesten Version von Mungo funktioniert: http://stackoverflow.com/questions/28311205/mongoose-throws-field-is-not-in-schema-error-when-defining-a-field- zweimal – Vraj

+0

Es funktionierte, als ich es mit Mungoise 4.5.3 versuchte. – JohnnyHK

+0

Ich benutze auch Mungo 4.5.3. Aber es wirft keine Ausnahme. Es wird in MongoDB gespeichert. – Vraj

Verwandte Themen