Валидация
ЛР19
Создаем на Github репозиторий cwp-19, клонируем его, открываем в IDE
Установим библиотеки express, body-parser и joi
Создадим файл index.js с простым express-сервером:
const express = require('express');
const bodyParser = require('body-parser');

const validator = require('./validator');

const app = express();

app.use(bodyParser.json());

app.post('/signin', (req, res, next) => {
  const validationResult = validator.check(req.route.path, req.body);

  if (validationResult.error) {
    res.status(400).json({
      succeed: false,
      message: validationResult.error.details
    });
  } else {
    res.json({ succeed: true });
  }
});

app.listen(3000, () => console.log('Example app listening on port 3000!'));
Создадим файл validator.js реализующий проверку запроса:
const Joi = require('joi');

const schemas = {
  '/signin': Joi.object().keys({
    login: Joi.string(),
    password: Joi.string(),
  }),
};

exports.check = function (schema, body) {
  if (!schemas[schema])  return {};

  return Joi.validate(body, schemas[schema], { presence: 'required' });
};
Запустим сервер и отправим валидный и не валидный запросы с помощью Postman
Создадим обработчик и валидацию для них
POST /signup
login // строка
password // строка, минимальная длина 10
email // электронная почта, опциональный параметр
invitedBy // строка, опциональный параметр
birth // дата, минимум 21 год
sex // строка, разрешено только 'male' и 'female'
agreedWithTerms // булеан, равен true
POST /drinks
name // строка, минимальная длина 3 максимальная 50
strength // число, дробное, положительное
code // строка, только числа и буквы
alcoholic // булеан, должно быть true если strength больше 0
POST /recipes
name // строка
ingredients // массив объектов, минимум 2
-- name // строка, уникальная в массиве
-- weight // число, целое, положительное
-- photos // массив строк, опциональный параметр
photos // массив строк, опциональный параметр
portions // строка или положительное не нулевое число
Синхронизируем локальный репозиторий с удаленным (сделаем push на Github)
Покажите историю коммитов своего репозитория на Github
Продемонстрируйте все маршруты
Документация по Joi