Meteor-publish-subscribe
Meteor-公開および購読
コレクションの章ですでに説明したように、すべてのデータはクライアント側で利用できます。 これは、発行および購読メソッドで処理できるセキュリティ問題です。
自動公開の削除
この例では、次のデータで PlayersCollection コレクションを使用します。 チャプター自体に集中できるように、このコレクションを準備しました。 MeteorアプリでMongoDBコレクションを作成する方法がわからない場合は、リンク:/meteor/meteor_collections [collections]の章を確認してください。
Meteor Publish and Subscribe Database Data
データを保護するには、クライアント側でデータの使用を許可していた autopublish パッケージを削除する必要があります。
C:\Users\username\Desktop\meteorApp>meteor remove autopublish
この手順の後、クライアント側からデータベースデータを取得することはできません。 コマンドプロンプトウィンドウでサーバー側からのみ表示できます。 次のコードをチェックアウトします-
meteorApp.js
var PlayersCollection = new Mongo.Collection('playersCollection');
var myLog = PlayersCollection.find().fetch();
console.log(myLog);
コマンドプロンプト*ウィンドウには、4つのオブジェクトを含むコレクション全体が表示されますが、 developersコンソール*には空の配列が表示されます。 これでアプリがより安全になりました。
パブリッシュおよびサブスクライブの使用
クライアントがデータを使用できるようにしたいとしましょう。 このために、サーバーで* 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);
データが developers console と command prompt ウィンドウの両方に記録されていることがわかります。
クライアントデータのフィルタリング
データの一部を公開することもできます。 この例では、 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 という名前の2つのオブジェクトを記録します。