Meteoro - Publicar y suscribirse

Como ya se discutió en el capítulo de Cobranzas, todos nuestros datos están disponibles en el lado del cliente. Este es un problema de seguridad que se puede manejar con métodos de publicación y suscripción.

Eliminar la publicación automática

En este ejemplo, usaremos PlayersCollectioncolección con los siguientes datos. Preparamos esta colección antes para poder concentrarnos en el capítulo en sí. Si no está seguro de cómo crear colecciones de MongoDB en la aplicación de meteoritos, consulte nuestro capítulo de colecciones .

Para proteger nuestros datos, debemos eliminar autopublish paquete que nos permitía utilizar los datos del lado del cliente.

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

Después de este paso, no podremos obtener los datos de la base de datos del lado del cliente. Solo podremos verlo desde el lado del servidor en la ventana del símbolo del sistema. Consulte el siguiente código:

meteorApp.js

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

los command prompt La ventana mostrará la colección completa con cuatro objetos, mientras que developers consolemostrará una matriz vacía. Ahora nuestra aplicación es más segura.

Usar Publicar y Suscribirse

Digamos que queremos permitir que los clientes usen nuestros datos. Para esto, necesitamos crearMeteor.publish()método en el servidor. Este método enviará los datos al cliente.

Para poder recibir y utilizar esos datos en el lado del cliente, crearemos Meteor.subscribe()método. Al final del ejemplo, estamos buscando en la base de datos. Este código se ejecuta tanto en el lado del cliente como en el del servidor.

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

Podemos ver que nuestros datos están registrados tanto en el developers console y el command prompt ventana.

Filtrado de datos del cliente

También podemos publicar parte de los datos. En este ejemplo, publicamos datos con 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);

Una vez que ejecutamos este código, command prompt registrará todos los datos, mientras que el lado del cliente console solo registrará dos objetos con el nombre John.