考虑 Publish/Subscribe 模板之外的规则 (Meteor)

Consider Publish/Subscribe rules outside of templates (Meteor)

我有一个应用程序,其中每个用户都有一个与之关联的计数器对象。用户订阅了相应的计数器。

每次用户提交表单时,我都想将用户计数器的当前值保存到表单中。但是,客户端和服务器在使用什么 Counter 对象上存在分歧。

Counters = new Mongo.Collection("counters");
Router.route('/register', { name: 'insertRegistration',
    waitOn: function() {
      return [ Meteor.subscribe('counters') ];
    },
});
RegistrationSchema = new SimpleSchema({
    somevalue: {
        type: String,
        autoValue: function() {
            console.log(Counters.findOne()); // Different results on client and server
            return "whatever";
        }
    }
});
if (Meteor.isServer) {
    Meteor.publish('counters', function() { 
        return Counters.find({ user_id: this.userId });
    });
}
客户端上的

Counters.findOne() 选择与当前用户关联的 Counter 对象。 Counters.findOne() 在服务器上从所有 Counter 对象的集合中挑选一个 Counter 对象。

我认为这是因为客户端请求 Counters 并获取其订阅的内容,而服务器请求 Counters 并获取集合。

有没有办法考虑服务器上的 publish/subscribe 规则?

在服务器上,执行

Counter.findOne({ user_id: this.userId }) 

为用户获取正确的计数器。