Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
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 });//рендерим используя шаблонизатор });