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

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


nodejs:mongo:svjazka_modelej_po_kljucham

Связка моделей по ключам

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