Meteor - Pubblica e iscriviti

Come già discusso nel capitolo Raccolte, tutti i nostri dati sono disponibili sul lato client. Si tratta di un problema di sicurezza che può essere gestito con i metodi di pubblicazione e sottoscrizione.

Rimozione della pubblicazione automatica

In questo esempio, useremo PlayersCollectionraccolta con i seguenti dati. Abbiamo preparato questa raccolta prima di poterci concentrare sul capitolo stesso. Se non sei sicuro di come creare raccolte MongoDB nell'app Meteor, controlla il nostro capitolo sulle raccolte .

Per proteggere i nostri dati, dobbiamo rimuovere autopublish pacchetto che ci consentiva di utilizzare i dati sul lato client.

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

Dopo questo passaggio, non saremo in grado di ottenere i dati del database dal lato client. Potremo vederlo solo dal lato server nella finestra del prompt dei comandi. Controlla il seguente codice -

meteorApp.js

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

Il command prompt la finestra mostrerà l'intera collezione con quattro oggetti, mentre il file developers consolemostrerà un array vuoto. Ora la nostra app è più sicura.

Utilizzo di Pubblica e Sottoscrivi

Diciamo che vogliamo consentire ai clienti di utilizzare i nostri dati. Per questo, dobbiamo creareMeteor.publish()metodo sul server. Questo metodo invierà i dati al client.

Per essere in grado di ricevere e utilizzare quei dati sul lato client, creeremo Meteor.subscribe()metodo. Alla fine dell'esempio, stiamo cercando nel database. Questo codice è in esecuzione sia sul lato client che sul lato server.

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);

Possiamo vedere che i nostri dati vengono registrati sia nel file developers console e il command prompt finestra.

Filtraggio dei dati dei clienti

Possiamo anche pubblicare parte dei dati. In questo esempio, stiamo pubblicando dati conname = "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);

Una volta eseguito questo codice, il file command prompt registrerà tutti i dati, mentre il lato client console registrerà solo due oggetti con il nome John.