Validierung des Request-Body
Schreib validate(schema, body), das ein Array von Fehlern liefert (leer, wenn alles stimmt). Eine Feldregel hat type ("string", "number", "boolean", "array"), required, min/max für Zahlen und minLength für Strings.
Fehlertexte: name: required (fehlend oder null), age: must be a number / tags: must be an array, age: must be >= 18, age: must be <= 99, name: must have at least 2 characters, und Felder, die nicht im Schema stehen, ergeben role: unknown field. Feldfehler kommen zuerst in der Reihenfolge des Schemas, dann unbekannte Felder in der Reihenfolge des Body. Ist der Body kein Objekt (ein String, ein Array, null), ist das Ergebnis ["body: must be an object"].
Strg+Enter führt die Tests aus. Tab rückt ein; um den Editor per Tastatur zu verlassen, drücke Esc und dann Tab. Der Code wird in diesem Browser gespeichert.
Tests (6)
const schema = { name: { type: 'string', required: true, minLength: 2 }, age: { type: 'number', min: 0, max: 150 } }; expect(validate(schema, { name: 'Ann', age: 30 })).toEqual([]); expect(validate(schema, { name: 'Ann' })).toEqual([]);
const schema = { name: { type: 'string', required: true }, email: { type: 'string', required: true } }; expect(validate(schema, {})).toEqual(['name: required', 'email: required']); expect(validate(schema, { name: null, email: 'a@b.c' })).toEqual(['name: required']);
const schema = { age: { type: 'number' }, tags: { type: 'array' }, admin: { type: 'boolean' } }; expect(validate(schema, { age: '30', tags: 'a,b', admin: 'yes' })).toEqual(['age: must be a number', 'tags: must be an array', 'admin: must be a boolean']); expect(validate(schema, { age: NaN })).toEqual(['age: must be a number']);
const schema = { age: { type: 'number', min: 18, max: 99 }, name: { type: 'string', minLength: 2 } }; expect(validate(schema, { age: 5, name: 'A' })).toEqual(['age: must be >= 18', 'name: must have at least 2 characters']); expect(validate(schema, { age: 120 })).toEqual(['age: must be <= 99']);
const schema = { name: { type: 'string' } }; expect(validate(schema, { name: 'Ann', role: 'admin', isAdmin: true })).toEqual(['role: unknown field', 'isAdmin: unknown field']);
const schema = { name: { type: 'string' } }; expect(validate(schema, null)).toEqual(['body: must be an object']); expect(validate(schema, [1, 2])).toEqual(['body: must be an object']); expect(validate(schema, 'text')).toEqual(['body: must be an object']);