Инструменты пользователя

Инструменты сайта


nodejs:mongo:sozdanie_sxemy

Создание схемы

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;//Экспортирум роутер
nodejs/mongo/sozdanie_sxemy.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)