Javascript函数没有执行而没有返回数组

时间:2017-11-30 16:04:59

标签: javascript express

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']

enter image description here

当我运行代码时,我将product2和product2添加到购物车,这就是它显示购物车的正确方式,因为它在购物车中显示两个正常行为的物品。

enter image description here

我非常感谢你的时间,并为你抽出时间而道歉

我是否需要使用for循环来遍历myCart对象以显示其中的所有项目而不是我最后添加的内容?

1 个答案:

答案 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)
  }
}