Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
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"}]