Cart.js
var Cart = function Cart(oldCart) {
this.items = oldCart.items || [];
this.add = function (item) {
this.items.push(item);
}
}
Мой маршрут index.js
router.post('/cart', (function (req, res) {
var productid = req.body.id
var myCart = new Cart(req.session.cart ? req.session.cart :{})
//query the db and return the correct object
Products.findById({ _id: productid }, function (err, product) {
//if there is an error...
if (err) {
return res.redirect('/');
}
myCart.add(product);
req.session.cart = myCart;
console.log(req.session.cart);
res.redirect('/');
});
}));
В конце вашего примера кода вы включили этот код, который я предполагаю, что это код для cart.js
function Cart(oldCart = {}) {
this.items = oldCart.items || [];
this.add = function (item) {
this.items.push(item)
}
}
но это дает мне ошибку с (oldCart = {}) в качестве параметра. поэтому я удалил это. Теперь я получаю один элемент, добавленный в корзину покупок, каждый раз, когда я нажимаю на элемент. Он не включает элементы, которые были нажаты ранее.
Вот консоль.log, обратите внимание, что "Strawberry" находится в моем первом запросе, а затем меня перенаправили на индексную страницу и нажали на "Apple", предполагается, что он будет накапливать продукт во втором запросе, чтобы показать корзину: [' Strawberry ',' Apple ']
Когда я запускаю свой код, где я добавляю Product2 и Product2 в корзину покупок, вот как он отображает корзину покупок, которая является правильной, потому что она показывает два элемента в корзине покупок, что является нормальным поведением.
Я благодарю вас за ваше время и приношу извинения за то,
Нужно ли использовать цикл for для перехода через объект myCart, чтобы отображать все элементы там вместо того, что я добавил последним?
Поскольку вы объяснили мне, что именно вы пытаетесь выполнить, я помогу вам сделать это самым простым способом.
Мы начнем с повторного форматирования вашего кода. Свойством items
в настоящее время является объект {}
но мы будем использовать массив []
.
'this.items = oldCart.items || []'
Поскольку items
теперь представляют собой массив, мы будем push
на него новые элементы, используя созданный вами метод add
. Я изменил это на это:
this.add = function(item){
this.items.push(item);
}
И это все, что вам нужно. Теперь в вашем коде после получения продукта для базы данных добавьте его в cart.items
а затем передайте его на свой сеанс:
Products.findById({ _id: productid }, function (err, product) {
if (err) {
return res.redirect('/');
}
//add the product to cart.items
cart.add(product)
//pass cart.items to the session
req.session.cart = cart.items;
req.session.save(function (err) {
return
});
//instantiate new cart object
const myCart = new Cart;
const product1 = {id:1, name:'orange', price:1};
const product2 = {id:2, name:'apple', price:2};
//add products
myCart.add(product1);
myCart.add(product2);
//you can see the added products
console.log(myCart.items)
function Cart(oldCart = {}) {
this.items = oldCart.items || [];
this.add = function (item) {
this.items.push(item)
}
}
Products.findBy...
cart.js
файлеcart.add
являетсяfunction