=====Создание схемы=====
**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;//Экспортирум роутер