← Усі задачіNode.js · Middle
Валідація тіла запиту
Напишіть validate(schema, body), що повертає масив помилок (порожній, якщо все гаразд). Правило поля: type ("string", "number", "boolean", "array"), required, min/max для чисел, minLength для рядків.
Тексти помилок: name: required (поле відсутнє чи 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, а поля, яких немає в схемі, - role: unknown field. Спершу помилки полів у порядку схеми, потім невідомі поля в порядку тіла. Якщо тіло - не об'єкт (рядок, масив, null), повертається ["body: must be an object"].
Ctrl+Enter - запустити тести. Tab - відступ; щоб вийти з редактора клавіатурою, натисніть Esc, а потім Tab. Код зберігається в цьому браузері.
Тести (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']);