=====вывод корзины===== **routes/card.js** const {Router} = require('express');//или const express.Router = require('express'); - модуль express //const Card = require('../models/card'); const Course = require('../models/course'); const router = Router(); /** * Преоброзовать массив * @param cart * @returns {{count: *}[]} */ function mapCartItems(cart){ return cart.items.map(c => ({//Обежим массив и вернем его в нужном виде ...c.courseId._doc, count:c.count })); } //посчитать итоговую стоимость function computePrice(courses){ return courses.reduce((total, course) => {//обежим массив и вернем итоговую стоимость return total += course.price* course.count; }, 0);//изначально total ставим в 0(параметр метода reduce) } /** * Страница card, вывод корзины * первый параметр адрес страницы, в данном случае используется префикс при регистрации ройтера, * второй параметр callback - обработчик запроса req - request , запрос от браузера */ router.get('/', async (req, res) => { const user = await req.user.populate('cart.items.courseId').execPopulate();//Получить данные корзины, из таблицы user /* *{ items:[ * { count: 3, _id: 5d488334686e032df850c3f4, courseId: [Object] }, * { count: 1, _id: 5d488369686e032df850c3f5, courseId: [Object] } * ]} */ const courses = mapCartItems(user.cart);//преобразовываем и на выходе получаем нужный массив //const card = await Card.fetch();// //const courses = await Course.find().populate('userId');//Получить данные курсов //console.log(card); res.render('card', { title: "Корзина",//прокидываем параметры в шаблон courses: courses, price: computePrice(courses),//посчитать итоговую стоимость isCard: true })//рендерим используя шаблонизатор });