服务器如何从客户端订阅集合?

时间:2014-12-08 20:51:13

标签: meteor

我想知道服务器是否可以从客户端订阅集合,以便只有服务器获得所有内容,而用户只有本地数据副本。

我想创建一个流星(移动)应用程序,人们可以在其中创建一些内容并将其存储在一个集合中(仅在设备上本地),除了本地的“所有者”本身以及拥有所有内容的服务器之外,没有人可以看到。如果创建了本地集合,则服务器订阅该集合,以便服务器可以收集来自每个用户的所有数据并显示它,例如在网站上。所以我有3个组件。生成内容的移动应用程序(客户端),收集所有内容的服务器以及仅读取具有完整内容的数据库的网站。

所以, 服务器是否可以订阅每个用户的每个集合?

2 个答案:

答案 0 :(得分:2)

是的,但想法是:允许每个订阅用户(客户端)查看他的数据。查看collection.allow(options)文档。客户端订阅集合,服务器决定客户端可以看到的内容。

答案 1 :(得分:1)

如果您有某种身份验证(或者如果您使用Accounts Meteor包),您可以在服务器端使用Meteor.publish()来仅发布属于当前用户的内容。

例如:

//Common Collection for both client and server (declared in lib/ for example): 
//(will be a full DB on the server and a minimongo with published data only 
//on the client)
Data = new Mongo.Collection('Data');    

//Server: (publish to client only what belongs to the user)
Meteor.publish('userData', function(){
    return Data.find({your_user_id_field:this.userId});
});

//Client: (the client only gets the data that belongs to him/her)
Meteor.subscribe('userData');
[... use the local collection as usual ...]