Enums und String-Format Validierung Grenzen
Kompakte Enums verwenden status:{draft|published} (auch ein Semikolon trennt die Auswahlmöglichkeiten). Der String wird vor der exakten, groß-/kleinschreibungssensitiven Mitgliedschaftsprüfung getrimmt. Ein erforderliches Enum lehnt einen ausgelassenen oder leeren Wert ab. Verschachtelte Objekte verwenden {name:Type}; sie sind keine Enum-Deklarationen.
In total5@0.0.19 akzeptiert Color hexadezimal #RGB, #RRGGBB und #RRGGBBAA; CSS-Farbnamen werden nicht akzeptiert. Icon validiert ein Klassennamenmuster, nicht das Vorhandensein des Icon-Assets. Base64 und Zip verwenden die Validatoren des Frameworks: Die Akzeptanz eines Formats ist keine Inhaltsprüfung. Im Kompaktschema-Parser dieser Version sind JSON und IP keine erkannten Subtypen und fallen auf einfache Strings zurück. Fehlerhaftes JSON und ungültiger IP-Text werden akzeptiert. Das explizite JSON-Schema unten setzt native subtype-Werte, um diese Prüfungen zu aktivieren; es parst keinen JSON-String zu einem Objekt. Verwende SafeString nicht anstelle gebundener SQL-Parameter oder Ausgabe-Escapings.
var schema = NEWSCHEMA('FormatBoundaries', '*status:{draft|published},*color:Color,*blob:Base64,*zip:Zip,*icon:Icon,*document:JSON,*address:IP');
var explicit = Total.newjsonschema('ExplicitFormats', { $id: 'ExplicitFormats', type: 'object', required: ['document','address'], properties: { document: { type: 'string', subtype: 'json' }, address: { type: 'string', subtype: 'ip' } } });
exports.install = function() {
ROUTE('POST /explicit/ @json', function($) {
var result = explicit.transform($.body);
if (result.error) { $.response.status = 400; $.json({ error: 'invalid format' }); }
else $.json(result.response);
});
ROUTE('POST /formats/ @json', formats);
};
function formats($) {
var result = schema.transform($.body);
if (result.error) {
$.response.status = 400;
$.json({ error: 'invalid format' });
} else
$.json(result.response);
}