我创造了一个简单的,简约的diary app。
在客户端上,我使用
Meteor.subscribe('entries', Meteor.userId());
订阅用户创建的条目(存储在mongodb集合中)。我将用户ID传递给发布功能(在服务器上):
Meteor.publish('entries', function(userID) {
return Entries.find({userId: userID});
});
登录后,Meteor.userId()
不再是假的,因为它是一个反应性数据源。但是,相关数据尚未公布。我通过自动运行订阅功能来解决这个问题:
Tracker.autorun(function() {
Meteor.subscribe('entries', Meteor.userId());
});
它有效,但我觉得这是一个糟糕的解决方案。
所以问题就出现了: 一般如何发布用户相关数据?必须有一种更好的方法来做到这一点,而不是将用户ID传递给publish-function。还有,不是不安全吗?
顺便说一下,我很乐意听到关于应用程序的一些反馈
答案 0 :(得分:1)
您不需要从订阅中传递userId。在publish功能中,您可以使用this.userId
来获取当前用户。如果用户未登录,您也可以返回一个空数组。
Meteor.publish("entries", function () {
if (!this.userId) return [];
return Entries.find({ userId: this.userId });
});