我们在项目中使用了流星V1.5 。我们注意到publish
和subscriber
方法的行为异常。从KADIRA发布一个subscriber
的屏幕截图
publish
方法
Meteor.publish( 'companyBuiltCourses', companyId => {
return BuiltCourses.find({ company_id: companyId })
});
当我们在subscriber
下面使用并且访问xyz
页面时,KADIRA会显示连续获取文档的信息,如屏幕截图所示。 即使我们访问了其他页面,该图也保持不变
Template.xyz.onCreated(function() {
Tracker.autorun( () => {
if (Meteor.user()) {
Meteor.subscribe('companyBuiltCourses',Meteor.user().profile.company_id);
}
});
});
当我们使用下面的subscriber
方法并访问xyz
页面时,KADIRA会显示连续获取文档的信息,如屏幕截图所示。 但是当我们访问另一个页面时,此图下降到0。它将不再获取文档
Template.xyz.onCreated(function() {
this.autorun( () => {
let self = this;
if(Meteor.user()){
self.subscribe('companyBuiltCourses',Meteor.user().profile.company_id);
}
});
});
对于开发环境,这两种方法仅在需要时才获取文档一次。这是PRODUCTION问题。
我们正在远程托管MongoDB,并且我们在pm2
上运行生产。我猜应该不应该连续提取。
答案 0 :(得分:0)
由于提供的代码非常简单,因此很难判断发生了什么。我唯一能想到的是,跟踪器函数被重复调用。所以问题是,是什么原因造成的?
此代码:Meteor.user().profile.company_id
建议您在user
集合中根据用户个人资料存储数据。这不是很好,因为用户可以从控制台修改自己的数据,并且帐户系统有时还会修改用户记录,这可能会影响订阅触发的次数。无论如何,我建议将相关数据存储在单独的集合中,可以通过Meteor.userId()
进行键控。我不确定这是否是答案。