2016-05-12 39 views
-1

在我的發佈方法中,如果一個不知名的用戶試圖訂閱某個出版物,或者我應該返回this.ready(),我應該拋出一個錯誤。 (在的CoffeeScript)流星出版物認證錯誤或this.ready

此:

Meteor.publish "secretInfo", -> 
    return @error(new Meteor.Error(422, "Permission denied")) unless @userId 

    return Secrets.find({}) 

,或者:

Meteor.publish "secretInfo", -> 
    return @ready() unless @userId 

    return Secrets.find({}) 
+0

你可以做,但我會建議只是'this.ready()',以避免虛假的用戶界面錯誤。據推測,如果客戶端上有用戶,您只需訂閱此出版物。 –

回答

1

普遍接受的解決方案是後者:

return @ready() unless @userId 

我儘量避免在出版物引發錯誤因爲用戶界面可以(取決於你實現它的方式)停留在加載狀態,除非你的發佈商eventua只要調用ready()(顯式地或隱式地返回遊標或其他有效值)。

這也在the guide指出:

在登出用戶的情況下,我們明確要求this.ready(),這表明到我們發送的所有數據訂閱我們最初將發送(在這種情況下沒有)。重要的是要知道,如果不從發佈中返回遊標或調用this.ready(),用戶的訂閱永遠不會準備就緒,並且他們可能永遠會看到加載狀態。