Meteor發佈和訂閱

在我們的集合這章節中,你會發現所有的數據可在客戶端上訪問。這是個安全問題,可以使用發佈和訂閱方法進行處理。

刪除自動發佈


在這個例子中,我們將使用 PlayersCollection 集合有以下數據。如果不能確定Meteor中如何創建 MongoDB 集合,您可以查看我們的集合這一章。
Meteor發佈和訂閱

爲了確保我們的數據,我們需要刪除包自動發佈,這是允許使用在客戶端的數據。

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發佈和訂閱

使用發佈和訂閱


比方說,我們要允許客戶端使用您的數據。要允許這一點,我們需要在服務器上創建 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發佈和訂閱