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 = {})作为参数。所以我删除了。 现在,每当我按下一个项目时,我都会将一个项目添加到购物车中。它不包含之前点击的项目。
这是console.log,通知' Strawberry'在我的第一个请求中,然后我被重定向到索引页面并点击了Apple',假设在第二个请求中累积产品以显示购物车:[' Strawberry&#39 ;,' Apple']
当我运行代码时,我将product2和product2添加到购物车,这就是它显示购物车的正确方式,因为它在购物车中显示两个正常行为的物品。
我非常感谢你的时间,并为你抽出时间而道歉
我是否需要使用for循环来遍历myCart对象以显示其中的所有项目而不是我最后添加的内容?
答案 0 :(得分:1)
既然你向我解释了你想要完成的是什么,我会尽可能以最简单的方式帮助你。
我们将从重新格式化代码开始。您的items
属性当前是对象{}
,但我们将改为使用数组[]
。
`this.items = oldCart.items || []`
由于items
现在是一个数组,我们会使用您创建的push
方法add
新项目。{1}}我将其修改为:
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)
}
}