2016-05-12 26 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(),用户的订阅永远不会准备就绪,并且他们可能永远会看到加载状态。