2016-09-02 6 views
3

Ich werde durch die (sehr zufrieden) Sails.js book, die diskutiert ein User-Modell User.js in Kapitel 6, wie so erstellen:Sails.js nicht Modellschema anwenden, wenn MongoDB mit

module.exports = { 
    connection: "needaword_postgresql", 
    migrate: 'drop', 
    attributes: { 
     email: { 
      type: 'string', 
      email: "true", 
      unique: 'string' 
     }, 

     username: { 
      type: 'string', 
      unique: 'string' 
     }, 

     encryptedPassword: { 
      type: 'string' 
     }, 

     gravatarURL: { 
      type: 'string' 
     }, 

     deleted: { 
      type: 'boolean' 
     }, 

     admin: { 
      type: 'boolean' 
     }, 

     banned: { 
      type: 'boolean' 
     } 
    }, 
    toJSON: function() { 
     var modelAttributes = this.toObject(); 
     delete modelAttributes.password; 
     delete modelAttributes.confirmation; 
     delete modelAttributes.encryptedPassword; 
     return modelAttributes; 
    } 
}; 

Postgres verwenden, ein neuer Rekord richtig füllt die boolesche Felder nicht durch das Login-Formular als null gestellt, wie das Buch sollte der Fall schlägt sein:

enter image description here

Aber ich will MongoDB statt PostgreSQL verwenden. Ich hatte kein Problem, den Adapter zu wechseln. Aber jetzt, wenn ich einen neuen Datensatz erstellen, das Schema in User.js zu ignorieren scheint, und setzt nur die wörtlichen POST-Daten in die DB:

enter image description here

Ich verstehe, dass MongoDB NoSQL ist und alle Parameter nehmen, aber ich hatte den Eindruck, dass die Verwendung eines Schemas in Users.js für eine POST-Anfrage an den /user-Endpunkt (über die Blueprint-Routen vorerst) gelten würde, unabhängig davon, welche Datenbank sich am unteren Ende befand. Muss ich das Modell irgendwie explizit an den Endpunkt für NoSQL-Datenbanken binden?

(Ich habe die Datensätze überprüft, die in Postgres und MongoDB geschaffen, und sie entsprechen den Antworten von localhost: 1337/user oben geschrieben)

Antwort

1

Ich verstehe, dass MongoDB NoSQL ist

Gut! In den Segeln ist das Segel-Mongo-Wasserlinien-Modul für alles zuständig, was mongodb betrifft. Ich glaube, ich habe den entsprechenden Code gefunden: https://github.com/balderdashy/sails-mongo/blob/master/lib/document.js#L95 So kümmert sich sails-mongo einfach nicht um nicht existente Werte. Wenn Sie das für schlecht halten, können Sie auf der github-Seite ein Problem erstellen.

könnte eine mögliche Abhilfe defaultsTo werden:

banned : { 
    type : "boolean", 
    defaultsTo : false 
} 
+0

Gotcha! Ich könnte ein Problem melden, da es keine unverschlüsselten Passwörter speichern sollte, aber ich bleibe bei SQL für jetzt. Vielen Dank! –

+0

(Obwohl das gesagt, Ch7 des Buches behandelt einige Backend-Validierung, die einige davon löst, so sprach ich vielleicht zu früh. Aber ich denke immer noch das Schema sollte unabhängig von der Datenbank angewendet werden!) –

+0

Auch http: // sailsjs .org/documentation/concepts/models-orm/lifecycle-callbacks könnten einen Blick wert sein, besonders die Callbacks bei create. Sie können sie löschen/verschlüsseln * bevor * sie in der Datenbank gespeichert sind. Außerdem sollten Entscheidungen über Datenbanktypen nicht von dieser Art von Fragen abhängen ... –

1

Sie Ihr Modell mit diesem Flag das Schema streng konfigurieren verwenden:

module.exports = { 
    schema: true, 
    attributes: { 
    ... 
    } 
} 
+0

Ich glaube, das hat absolut keine Auswirkungen bei der Verwendung von Segel-Mongo! –

+0

Es funktioniert gut, ich habe es gerade getestet. –

+0

Wie hast du es getestet? Hast du Segel-Mongo benutzt? Weil ich es gerade ausprobiert habe und es nicht funktioniert. –

Verwandte Themen