2013-09-25 50 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