Meteor会话继续在购物车中重置

时间:2015-04-14 19:58:27

标签: session meteor

我正在使用Meteor构建一个网上商店。我有一个问题,当项目添加到购物车时,Meteor会话被重置。用户可以从两个位置将商品添加到购物车 - 主产品列表页面和产品详细信息页面。

方案A:客户位于主产品列表页面上,并将商品添加到购物车。然后,客户单击另一个项目的产品详细信息页面。然后,客户从产品详细信息页面向购物车添加商品。将创建一个新会话,并且在产品列表页面上添加的项目将消失,并且只有产品详细信息页面中的产品才会显示在购物车中。

所以我的问题是当一个项目被添加到购物车时会创建一个新会话而我不确定为什么会发生这种情况......

以下是我的productDetails.js中的addToCart点击事件:

'click .add-to-cart': function (e, tmpl) {
e.preventDefault();

var quantity = $('[name=qty]').val();
var thisProduct = Products.findOne();
var sessionId = Meteor.default_connection._lastSessionId;
var productInfo = {
  productCode: thisProduct.productCode,
  memPrice: thisProduct.memPrice,
  brand: thisProduct.brand,
  size: thisProduct.size,
  description: thisProduct.description,
  quantity: quantity,
  sessionId: sessionId
};
Session.set('sessionId', sessionId);

console.log(productInfo);

if (quantity > 0) {
  Meteor.call('addToCart', quantity, productInfo);
  Router.go('Tires');
} else {
  alert('Please input a desired quantity');
}

}

以下是我的主产品页面中的addToCart点击事件:

'click .add-to-cart': function (e, tmpl) {
e.preventDefault();

var currUser = Meteor.user();   
if(!currUser) {
  alert("Please register for an account before you may add items to cart");
} else if (!currUser.profile.confirmed) {
  alert("Your account needs to be confirmed before you may add items to cart. Please contact info@info.org for assistance.")
} else {
  var currentRow = $(e.target).closest('tr');
  var quantity = currentRow.find('.item-quantity').val();
  var sessionId = Meteor.default_connection._lastSessionId;
  var productInfo = {
    productCode: this.productCode,
    memPrice: this.memberPrice,
    brand: this.brand,
    size: this.size,
    description: this.description,
    quantity: quantity,
    sessionId: sessionId
  };
  Session.set('sessionId', sessionId);

  if (quantity > 0) {
    Meteor.call('addToCart', quantity, productInfo);
    currentRow.find('.item-quantity').val(0);
  } else {
    alert('Please input a desired quantity');
  }
};

}

这是我的addToCart方法:

addToCart: function(qty, productInfo, cb) {
    console.log('//-------------Item Data-------------');
    console.log("Product Info: ", productInfo);

    if (qty > 0) {
        Cart.insert(productInfo);
    }
}

有什么想法?提前谢谢!

1 个答案:

答案 0 :(得分:0)

Meteor.default_connection._lastSessionId为您提供websocket“session”id,它不是持久性的,也不是像cookie一样跟踪用户会话的方法。 您应该依赖用户帐户并将购物车存储在配置文件中,或使用其他Mongo集合。