Meteor发布和订阅
在我们的集合这章节中,你会发现所有的数据可在客户端上访问。这是个安全问题,可以使用发布和订阅方法进行处理。
删除自动发布
在这个例子中,我们将使用 PlayersCollection 集合有以下数据。如果不能确定Meteor中如何创建 MongoDB 集合,您可以查看我们的集合这一章。
为了确保我们的数据,我们需要删除包自动发布,这是允许使用在客户端的数据。
C:\Users\Administrator\Desktop\meteorApp>meteor remove autopublish
在此步骤后,你会发现,无法从客户端获取数据库中的数据。只能在命令提示符窗口中的服务器端看到它。检出下面的代码 -
meteorApp/client/app.js
var PlayersCollection = new Mongo.Collection('playersCollection'); var myLog = PlayersCollection.find().fetch(); console.log(myLog);
命令提示符窗口将显示整个集合有四个对象,而开发者控制台会显示一个空数组。现在,我们的应用程序更安全。
使用发布和订阅
比方说,我们要允许客户端使用您的数据。要允许这一点,我们需要在服务器上创建 Meteor.publish()方法。该方法将数据发送到客户端。为了能够接收和使用在客户端的数据,我们将创建Meteor.subscribe()方法。在该示例的结尾,我们检索的数据库。这段代码可以在客户端和服务器上运行。
var PlayersCollection = new Mongo.Collection('playersCollection'); if(Meteor.isServer) { Meteor.publish('allowedData', function() { return PlayersCollection.find(); }) } if (Meteor.isClient) { Meteor.subscribe('allowedData'); }; Meteor.setTimeout(function() { var myLog = PlayersCollection.find().fetch(); console.log(myLog); }, 1000);
我们可以看到,数据会记录在开发者控制台和命令提示符窗口。
过滤客户端数据
我们还可以发布数据的一部分。在这个例子中,我们只发布 name="John"的数据。
var PlayersCollection = new Mongo.Collection('playersCollection'); if(Meteor.isServer) { Meteor.publish('allowedData', function() { return PlayersCollection.find({name: "John"}); }) } if (Meteor.isClient) { Meteor.subscribe('allowedData'); }; Meteor.setTimeout(function() { myLog = PlayersCollection.find().fetch(); console.log(myLog);}, 1000);
当我们运行这段代码,命令提示符将记录所有的数据,而客户端控制台将只日志记录两个名称为 John 的对象。