2013-09-25 111 views
0

我对同一主题有另一个最近的问题(后人:Meteor.js Publishing and Subscribing?)。Meteor.js发布和订阅2

我有一个测试流星站点。我在根目录下的文件如下:

/** 
* Models 
*/ 

Posts = new Meteor.Collection('posts'); 


posts = Posts; 

if (Meteor.isClient) { 

    Meteor.subscribe('posts'); 

} 

if (Meteor.isServer) { 

    Meteor.publish('posts', function() { 
     return posts.find({}, {time:-1, limit: 100}); 
    }); 


    posts.allow({ 

     insert: function (document) { 
      return true; 
     }, 
     update: function() { 
      return false; 
     }, 
     remove: function() { 
      return false; 
     }, 

    }); 

} 

实际情况是,我做了编辑,并且停止工作(在开发服务器:本地主机:3000)。我回复了编辑,但我猜想事情有所改变,因为它不再有效。

客户端确实有权访问收藏(帖子加载列表),所以这不是问题。

问题是,第二个客户端提交一个帖子,它出现在列表中的第二个,然后消失。

这似乎与客户端没有发布权时类似的行为,但正如您可以在上面看到的,我已给出它。

当我在Chrome浏览器中访问JS控制台时,没有出现“访问被拒绝”或出现错误。

当我尝试从控制台添加帖子时,会发生同样的行为。闪烁,然后它消失了。

发生了什么事?这只是一个奇怪的流星故障?任何帮助赞赏。

编辑

OK,清楚一些内部流星毛刺; “流星重置”解决了代码本身无变化的问题。

所以我猜问题解决了!

编辑2

NOOOO。问题没有解决。它又出现了。

一旦帖子数量达到某个阈值,它似乎会拒绝他们,这使我相信它与“限制”有关。

任何帮助?

回答

0

假设您的客户端在其本地缓存中有100个帖子。然后,当客户端插入新帖子时,它会直接插入到客户端缓存中(因此它现在包含101个帖子),并在后台将其发送到服务器。服务器将它插入到真实数据库中,然后告诉客户端删除其中一个缓存的帖子,因为它应该只在其缓存中存储100个帖子。这可能是你正在发生的事情。

+0

很可能,但如果这是真的不会刷新页面显示以前发布的帖子,而不是只有在达到限制之前张贴的帖子? – Aristides

+0

@Aristides你说的是真的,如果你以这种方式订购这些帖子(并且不需要刷新)。但是如果你在浏览器的javascript控制台中运行'Posts.insert({whatever})',你会得到一个错误消息(插入失败?)?或者何时显示错误消息?收集是否有任何拒绝规则? –

+0

不,没有插入失败的错误信息(实际上根本没有错误信息)。客户端只允许添加,不允许更新或删除。但即使添加也没有工作(如果它已超过100项)。 – Aristides