const {Router} = require('express'); //или const express.Router = require('express');
const Course = require('../models/course');
const auth = require('../middleware/auth');//модуль middleware , для защиты ройтов
const {validationResult} = require('express-validator');//валидация работающая с express
const {courseValidators} = require('../validator/validator');//middleware - мой валидатор на основе express-validator
const router = Router();
/**
* страница add
* Обработка POST запроса
* @params '/' адрес страницы, в данном случае используется префикс при регистрации ройтера,
* там страничка зарегестрирована как /add
* @params auth - зашит роута
* @params courseValidators - валидатор
* четвертый параметр асинхронный callback - обработчик запроса req - request , запрос от браузера
* res - response, ответ сервера
*/
router.post('/', auth, courseValidators,async (req, res) => {//асинхронная функция
const error = validationResult(req);//получить результирующую ошибку если она есть
if(!error.isEmpty()){//если ошибка присутствует
return res.status(422).render('add', {
title:'Добавить курс',//прокидываем параметры в шаблон
isAdd: true,
error: error.array()[0].msg,
data:{//подстановка веденных данных после ошибки, что бы не заполнять форму повторно
title: req.body.title,
price: req.body.price,
img: req.body.img
}
});//рендерим используя шаблонизатор
// , 422 -код ошибки валидации
}
//res.end(JSON.stringify(req.body));//Распечать POST на страничке
try{
const course = new Course({//модель для добавления новых курсов
title: req.body.title,//Поля для записи в БД
price: req.body.price,
img: req.body.img,
userId: req.user._id//Связка с таблице User
});
await course.save();//сохранить запись
res.redirect('/courses');//Редирект на страницу с курсами
}catch(e){
console.log(e);
}
});
module.exports = router;//Экспортирум роутер
**validator/validator.js**
const {body, sanitizeBody} = require('express-validator');//валидация работающая с express
/**
* Название валидатора произвольное, форма добавление нового курса
* @type {*[]}
*/
exports.courseValidators = [
body('title').isLength({min:3}).withMessage('Минимальная длина названия 3 символа').trim(),
body('price').isNumeric().withMessage('Введите корректную цену'),
body('img', 'введите корректно url').isURL()
];
**template/add.hbs**
Добавить курс
{{#if error}}
{{error}}
{{/if}}