=====Связка моделей по ключам=====
**models/user.js**
const {Schema, model} = require('mongoose')//подключаем из библиотеки монго,модульсоздания схемы - Schema,
// и модуль регистрации моделей - model
/**
* Схема пользователя
*
* В табличке пользователя сразу встраиваем корзину
* @type {*|Mongoose.Schema}
*/
const userSchema = new Schema({
email: {//email
type: String,
required: true
},
name: { //Имя пользователя
type: String, //строка
required: true //поле обязательное
},
cart: { //Корзина
items: [ //Позиции
{
count: { //колличество заказанных одинаковых курсов
type: Number, //тип число
required: true, //поле обязательно
default: 1
},
courseId: {
type: Schema.Types.ObjectId, //тип ObjectId
ref: 'Course', //связка с models/course.js
required: true //поле обязательно
}
}
]
}
})
module.exports = model('User', userSchema)//Возврощаем схему, на нее можно вешать различные методы ,
// в частности update, save, delete и т.д.
**models/course.js**
const {Schema, model} = require('mongoose');//подключаем из библиотеки монго,модульсоздания схемы - Schema,
// и модуль регистрации моделей - model
const course = new Schema({//Создаем схему БД для модели
title: {//Поле title с опциями
type:String,//тип поля - строка
required: true,//Обязателное поле
},
price: {
type: Number,//тип поля число
required: true//обязательное поле
},
img: String,//тип поля строка, альтернативная запись если доп. опций нету
userId:{//Связка с таблицей User
type: Schema.Types.ObjectId,
ref: 'User'
}
});
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) => {
//populate - вытащить данные из модели User ,
//populate('userId', 'email name') - вытащит из модели User поля email и name
const courses = await Course.find().populate('userId');//Получить данные курсов
//res.status(200);//вернуть статус ответа
res.render('courses',{
title: 'Курсы',//параметры на вывод в шаблоне
isCourses: true,
courses: courses
});//рендерим используя шаблонизатор
});