某些Meteor数据源需要多长时间?

时间:2014-10-26 05:03:48

标签: meteor

MiniMongo Collection通常会同步到Mongo Collection,因此它的生命基本上是永恒的。

我想存储一个Shopping Cart对象。当用户登录时,存储和管理购物车数据持续的时间很容易。但是当用户没有登录时怎么办?您不希望他们导航到网站的其他部分,甚至刷新页面并彻底清除他们的购物车。但是你也不想长时间存放购物车。将内容存储一天或几小时就足够了。

miniMongo Local Collection(new Mongo.Collection("null");)持续多长时间?我可以将购物车内容存储在本地集合中,还是在页面刷新时擦除集合?

同样,Session变量持续多长时间?

---答案摘要---

  • 会话变量 - 在页面刷新后死亡,被动
  • 本地收藏 - 在页面刷新后死亡,被动
  • LocalStorage API - https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage,持续不同的时间段,从永久到关闭选项卡,不被反应,不同的浏览器有不同的方式存储和从LocalStorage检索,代码复杂。
  • 使用Amplify的LocalStorage - http://amplifyjs.com/ - 基本上是一种使用LocalStorage API的简单方法。
  • 使用时间戳将数据存储到Mongo Collection中。使用该时间戳运行一个cronjob,该cronjob会在一段时间后定期删除数据 - 被动,在所有计算机和浏览器中持续存在,让您完全控制数据到期的方式和时间,需要更多的编码和设置

2 个答案:

答案 0 :(得分:4)

页面刷新后会删除会话变量和本地集合,因此您可以从可能列表中删除它们。

另一种方法是将购物车数据存储在localStorage中。如果您需要支持旧版浏览器,可以直接调用localStorage API,也可以使用amplify.jsmeteor package)之类的polyfill进行调用。这种方法的唯一问题是它不能在浏览器/计算机之间工作,并且它不会在标签之间产生反应。

我的建议是将购物车数据存储在一个保留updatedAt时间戳的集合中。然后添加cron job,定期删除updatedAt超过X小时的所有购物车。这样做的好处是可以在标签/浏览器/计算机之间进行反应,并且您可以完全控制购物车何时到期(包括添加花哨的规则,如果用户碰巧连接则不会使购物车过期)。

答案 1 :(得分:1)

GroundDB旨在在Collections API之上创建一个瘦包装器,这样您就可以在本地持久保存连接,而不需要太多编码开销,即使是离线访问也是如此。重新连接数据时刷新。 https://github.com/GroundMeteor/db