【问题标题】:Meteor: unreliable session variable?Meteor:不可靠的会话变量?
【发布时间】:2013-10-06 04:02:49
【问题描述】:

我正在制作一项没有用户帐户的服务,并且我想限制我正在访问的页面。

所以每个页面都是一个“盒子”,在每个“盒子”上我都有一堆“文件”。

我已经在 server/publications.coffee 中发布了相关信息

Meteor.publish 'files', (boxId)->
  console.log boxId
  return Files.find({boxId:boxId})

我的“盒子”文件有一个订阅句柄:

@filesHandle = Meteor.subscribe 'files', Session.get('currentBoxId')

并且currentBoxId存储在会话变量中。

这是疯狂的部分:我希望它能够工作,并且在我第一次启动服务器时它会起作用。第一段代码中的 console.log 打印出正确的 ID。然后,突然控制台日志突然开始返回“null”,即使我在浏览器控制台中 console.log 会话变量,它也正确返回。

我觉得这里存在某种加载异步问题,但我不知道发生了什么。

有什么线索吗?

【问题讨论】:

  • 请记住,Meteor Session 在页面刷新之间不会持续存在,如果您在浏览器中按 Ctrl+R,请不要指望保留该值。见projectricochet.com/blog/meteor-js-performance#.UlHsaBCc5pg
  • 天哪,你是对的。突然间,我不知道为什么我写的代码能正常工作。当我刷新时,会话变量没有被保留,但相关数据仍然被检索到!你知道这怎么可能吗?这是相关代码...Template.boxPage.created = ()-> @filesHandle = Meteor.subscribe 'files', Session.get('currentBoxId')
  • 等等,经过进一步检查,似乎我的会话变量在页面刷新期间确实存在。 Meteor 是否改变了它处理会话的方式?
  • 如果你 Ctrl+R 你的 Session 被清除,但是如果你做一个“热代码推送”,即更改代码并且为你刷新浏览器,Session 会被保留(这个差异让我感到震惊几次寻找一个错误,结果证明是键盘和椅子之间的错误);)我还看到一些使用 localStorage 来尝试维护会话的包(不记得他们的名字),所以也许您的项目中有其中之一。
  • @BobDavies 指出这是一个极好的事实。谢谢。

标签: session meteor


【解决方案1】:

啊,想通了。显然,可以在设置会话变量之前呈现模板。通常您将集合句柄放在应用程序范围内的 main.js 文件中,但如果订阅依赖于会话变量,这将不起作用。

我做了以下事情:

Template.boxPage.created = ()->
  @filesHandle = Meteor.subscribe 'files', Session.get('currentBoxId')

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多