=====модели=====
**models/course.js**
const uuid = require('uuid/v4'); //подключаем модуль для создания уникальных идентификаторов, 4-ой версии
const fs = require('fs');// модуль для взаимодействия с файловой системой
const path = require('path');//модуль для генерации путей к файлам
/**
* Добавить запись в файл , данные из формы на странице add
*/
class Course{
/**
* Инициализация полей формы
* @param title загловок
* @param price цена
* @param img url картиеки
*/
constructor(title, price, img){
this.title = title;
this.price = price;
this.img = img;
this.id = uuid();//Сохдаем идентификатор
}
/**
* Вернуть объект с данными
* @returns {string}
*/
toJSON(){
return {
title:this.title,
price:this.price,
img:this.img,
id:this.id
};
}
/**
* Записать данные в файл, венуть промис
* @returns {Promise}
*/
async save(){
const courses = await Course.getAll();//получить массив из файла
courses.push(this.toJSON());//добавить объект сформированный из данных формы в массив
return new Promise((resolve, reject) => {// - возвращаем промис, проверяем ответ либо через async away, либо then
fs.writeFile(//Запись в файл
path.join(__dirname, '..', 'data', 'courses.json'),//генерируем путь файлу
JSON.stringify(courses),//преобразуем массив в JSON
(err) => {
if(err){//если запись не удалась вернем ошибку
reject();
}
resolve();//если все хорошо
}
);
}) ;
}
/**
* Прочитать файл и вернуть из него данные
* @returns {Promise} - возвращаем промис, проверяем ответ либо через async away, либо then
*/
static getAll(){
return new Promise((resolve, reject) =>{
fs.readFile(//читаем файл
path.join(__dirname, '..','data', 'courses.json'),//генерируем путь к файлу
'utf-8',//кодировка
(err, data) => {//callback имеет два параметра ошибка , и данные из файла
if(err){
reject(err)//если мы отловили ошибку
}
resolve(JSON.parse(data));//в случае успеха вернем распарсенную строку JSON
}
);
});
}
}
module.exports = Course;//Экспортирум класс в роутер
**routes/add.js**
const {Router} = require('express'); //или const express.Router = require('express');
const Course = require('../models/course');
const router = Router();
/**
* страница 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);
await course.save();//сохраняем запись в файл
res.redirect('/courses');//Редирект на страницу с курсами
});
module.exports = router;//Экспортирум роутер
**data/courses.json**
{"title":"Тест","price":"300","img":"https://stackoverflow.com/","id":"6b680b10-d128-4fc0-9ccc-230823f6776d"}]