2013-05-12 54 views
3

出於安全原因,我希望在將文檔發佈到客戶端之前添加和刪除文檔的屬性,具體取決於某些動態計算。我遵循Meteor documentation和這個other SO question流星在發佈之前未對文檔進行轉換

例如簡單,說我嘗試下面的靜態屬性添加到每個文件(僅限服務器端):

var Docs = new Meteor.Collection('docs', { 
    transform: function (f) { 
     console.log('Tagging doc: ' + f._id); 
     f.myProp = 1; 
     return f; 
    } 
}); 

一些奇怪的原因,這不起作用:

  1. 只有一些文件觸發轉換功能,不是全部(我可以通過控制檯日誌記錄看到這一點)
  2. 在客戶端,沒有文檔標記爲myProp

我還沒有嘗試將transform放在客戶端和服務器上,因爲在我的現實生活中,我無法在客戶端上進行必要的計算。

回答

2

變換的集合功能的目的爲了方便,而不是安全 - 注意,當您上的光標呼籲observeChanges,該信息不是通過變換函數傳遞(它穿過,當你調用observe變換) 。發佈遊標的默認方式是通過調用observeChanges

如果您想剝離您要發佈的光標字段,請在集合上使用fields選項find。如果你想做一些更復雜的事情,如果你的發佈函數本身調用added,changedremoved,你可以明確地做任何你需要的計算,而不是返回一個遊標。詳情請查閱Meteor.publish的文檔。

+1

有沒有辦法通過發佈來從服務器發送附加組件/虛擬域到客戶端? – 2014-03-10 12:30:43