ForgeTotal.js 5
ro

Total.js 5

Limitele de validare a enumelor și a formatului string

Total.js 5 · total5@0.0.19 total5reference Executată cu Total.js 5

Enumurile compacte folosesc status:{draft|published} (punctul și virgula separă și el alegerile). Șirul este tăiat înainte de verificarea exactă a apartenenței, sensibilă la majuscule. Un enum obligatoriu respinge o valoare omisă sau goală. Obiectele imbricate folosesc {name:Type}; nu sunt declarații de enum.

În total5@0.0.19, Color acceptă hexazecimal #RGB, #RRGGBB și #RRGGBBAA; nu acceptă nume de culori CSS. Icon validează un model de nume de clasă, nu prezența resursei iconiței. Base64 și Zip folosesc validatorii framework-ului: acceptarea unui format nu este verificarea conținutului. În parserul de schemă compactă din această versiune, JSON și IP nu sunt subtipuri recunoscute și revin la șiruri simple. JSON malformat și text IP invalid sunt acceptate. Schema JSON explicită de mai jos setează valori native subtype pentru a activa aceste verificări; nu parsează un șir JSON într-un obiect. Nu folosi SafeString în locul parametrilor SQL legați sau al escapării ieșirii.

controllers/formats.js
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);
}