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.