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

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


nodejs:mongo:vyvod_korziny

вывод корзины

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