=====Создание схемы===== **models/course.js** - Создание модели для обработки курсов const {Schema, model} = require('mongoose');//подключаем из библиотеки mongo,модуль создания схемы - Schema, // и модуль регистрации моделей - model const course = new Schema({//Создаем схему БД для модели title: {//Поле title с опциями type:String,//тип поля - строка required: true,//Обязателное поле }, price: { type: Number,//тип поля число required: true//обязательное поле }, img: String//тип поля строка, альтернативная запись если доп. опций нету }); module.exports = model('Course', course);//Возврощаем модель, на нее можно вешать различные методы , // в частности update, save, delete и т.д. Далее идут роутеры с методами для взаимодействия с моделью **routes/courses.js** const {Router} = require('express'); //или const express.Router = require('express'); const Course = require('../models/course');//модель для вывода списков курсов const router = Router();//инициализируем роутер /** * страница courses * первый параметр адрес страницы * второй параметр callback - обработчик запроса req - request , запрос от браузера * res - response, ответ сервера */ router.get('/',async (req, res) => { const courses = await Course.find();//Получить данные курсов //res.status(200);//вернуть статус ответа res.render('courses',{ title: 'Курсы',//параметры на вывод в шаблоне isCourses: true, courses: courses });//рендерим используя шаблонизатор }); /** * страница courses /courses/c44e2956-48f4-49f5-b0f9-916e1efb709f * первый параметр адрес страницы,с динамическим параметром id * второй параметр callback - обработчик запроса req - request , запрос от браузера * res - response, ответ сервера */ router.get('/:id',async (req, res) => { const course = await Course.findById(req.params.id);//Получить данные курсов //res.status(200);//вернуть статус ответа res.render('course',{ layout: 'empty',//- новый шаблон вместо main.hbs, template/layouts/empty.hbs course: course //ОБъект с данными по курсу });//рендерим используя шаблонизатор }); /** *страница courses /courses/c44e2956-48f4-49f5-b0f9-916e1efb709f/edit * первый параметр адрес страницы,с динамическим параметром id * второй параметр callback - обработчик запроса req - request , запрос от браузера * res - response, ответ сервера */ router.get('/:id/edit',async (req, res) => { if(!req.query.allow){ return res.redirect('/'); } const course = await Course.findById(req.params.id);//Получить данные курса //res.status(200);//вернуть статус ответа res.render('edit',{ layout: 'empty',//- новый шаблон вместо main.hbs, template/layouts/empty.hbs course: course //ОБъект с данными по курсу });//рендерим используя шаблонизатор }); /** * страница courses /courses/edit * первый параметр адрес страницы * второй параметр callback - обработчик запроса req - request , запрос от браузера * res - response, ответ сервера */ router.post('/edit', async (req, res) => { await Course.findByIdAndUpdate(req.body.id ,req.body);//Обновить данные курса res.redirect('/courses/'+req.body.id);//страница courses /courses/c44e2956-48f4-49f5-b0f9-916e1efb709f }); module.exports = router;//Экспортирум роутер **routes/add.js** const {Router} = require('express'); //или const express.Router = require('express'); const Course = require('../models/course'); const router = Router(); /** * страница add * первый параметр адрес страницы, в данном случае используется префикс при регистрации ройтера, * там страничка зарегестрирована как /add * второй параметр callback - обработчик запроса req - request , запрос от браузера * res - response, ответ сервера */ router.get('/', (req, res) => { res.status(200);//вернуть статус ответа res.render('add',{ title:'Добавить курс',//прокидываем параметры в шаблон isAdd: true });//рендерим используя шаблонизатор }); /** * страница add * Обработка POST запроса * первый параметр адрес страницы, в данном случае используется префикс при регистрации ройтера, * там страничка зарегестрирована как /add * второй параметр callback - обработчик запроса req - request , запрос от браузера * res - response, ответ сервера */ router.post('/',async (req, res) => {//асинхронная функция // res.status(200);//вернуть статус ответа //console.log(req.body);//Данные POST //res.end(JSON.stringify(req.body));//Распечать POST на страничке //const course = new Course(req.body.title, req.body.price, req.body.img); try{ const course = new Course({//модель для добавления новых курсов title: req.body.title,//Поля для записи в БД price: req.body.price, img: req.body.img }).save(); // await course.save();//сохраняем запись в файл res.redirect('/courses');//Редирект на страницу с курсами }catch(e){ console.log(e); } }); module.exports = router;//Экспортирум роутер