Meteor - 发布和订阅


正如集合章节中已经讨论的那样,我们的所有数据都可以在客户端获取。这是一个安全问题,可以通过发布和订阅方法来处理。

删除自动发布

在此示例中,我们将使用包含以下数据的PlayersCollection集合。我们之前准备了这个集合,以便能够专注于本章本身。如果您不确定如何在 Meteor 应用程序中创建 MongoDB 集合,请查看我们的集合章节。

Meteor 发布和订阅数据库数据

为了保护我们的数据,我们需要删除允许我们在客户端使用数据的自动发布包。

C:\Users\username\Desktop\meteorApp>meteor remove autopublish

完成这一步后,我们将无法从客户端获取数据库数据。我们只能在服务器端的命令提示符窗口中看到它。检查以下代码 -

流星App.js

var PlayersCollection = new Mongo.Collection('playersCollection');
var myLog = PlayersCollection.find().fetch();
console.log(myLog);

命令提示符窗口将显示包含四个对象的整个集合,而开发人员控制台将显示一个空数组。现在我们的应用程序更加安全。

Meteor 发布和订阅自动发布已删除

使用发布和订阅

假设我们希望允许客户使用我们的数据。为此,我们需要在服务器上创建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);

我们可以看到我们的数据记录在开发人员控制台命令提示符窗口中。

Meteor 发布和订阅全部允许

过滤客户数据

我们也可以公布部分数据。在此示例中,我们发布 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的对象。

Meteor 发布和订阅全部允许