2015-10-30 60 views
0

我想使用的實用程序:頭像包,但我有一些主要保留。流星公用事業:頭像數據

的文檔告訴我,我應該公佈我的用戶數據,像這樣:

Meteor.publish("otherUserData", function() { 
var data = Meteor.users.find({ 
    }, { 
     fields : { 
      "services.twitter.profile_image_url_https" : true, 
      "services.facebook.id" : true, 
      "services.google.picture" : true, 
      "services.github.username" : true, 
      "services.instagram.profile_picture" : true 
     } 
    }); 
    return data; 

}); 

如果我沒有理解流星的發佈/正確的訂閱機制,這將推動這些領域對整個用戶數據庫,每一個客戶!顯然,這不是一個可持續的解決方案。然而,同樣清楚的是,我做錯了什麼,或者我理解錯了什麼。

此外:這種不可縮放的解決方案在瀏覽器中正常工作,但由於某種原因,應用程序部署到移動設備時不會顯示頭像圖標。

任何想法?

+1

這似乎可能不可持續的過去幾千用戶。最好將數據存儲在你展示頭像的對象上,例如如果您顯示的是類似論壇帖子的內容,則可以在每個帖子中存儲userId,username和avatarUrl。缺點是如果用戶改變他們的頭像,你可能不得不用新的頭像網址更新每個帖子。您可以將磁盤存儲在名爲userId的MD5哈希的磁盤上,並從公用文件夾或像nginx這樣的性能更好的服務器後面存儲,然後將userId和用戶名存儲在每個對象上。 –

回答

1

單獨發行其中字段要發佈其中用戶要發佈數據。

大概你想顯示當前用戶正在與之交互的其他用戶的頭像。你需要決定什麼查詢

Meteor.users.find(query,{fields: {...}}); 

使用,讓你縮小所有用戶只是那些相關的名單。

在我的app我最終使用reywood:publish-composite通過中間集合發佈與當前用戶相關的用戶。

+0

感謝您的建議,以及關於reywood的提示:publish-composite。我的問題特別是關於公用事業:頭像,它似乎沒有任何過濾用戶的機制。我們最終決定刪除實用程序:頭像數據並手動重寫整個頭像處理。我仍然不明白utility:avatar是如何在一個擁有超過幾千用戶的生產環境中工作的。 – Marc

+1

我的感覺是,查詢只是作爲一個例子提供。沒有理由不能做'Meteor.users.find({一些實際的查詢},{fields:他們給你的列表})'來限制你返回的用戶。 –

0

實用程序的不可擴展性:據我所知,頭像似乎是一個真正的問題,除了刪除實用程序:頭像和重寫頭像網址提取代碼之外,沒有太多的工作要做用手。

至於沒有出現在移動設備上的化身,得到的答案是簡單的,我們需要將權限授予訪問遠程URL在移動config.js,像這樣:

App.accessRule("http://*"); 
App.accessRule("https://*");