Meteoro - Guía rápida

Según la documentación oficial de Meteor -

Meteor es una plataforma JavaScript de pila completa para desarrollar aplicaciones web y móviles modernas. Meteor incluye un conjunto clave de tecnologías para crear aplicaciones reactivas para clientes conectados, una herramienta de compilación y un conjunto seleccionado de paquetes de Node.js y la comunidad general de JavaScript.

Caracteristicas

  • Web and Mobile - Meteor ofrece una plataforma para desarrollar aplicaciones web, Android e IOS.

  • Universal Apps - El mismo código para navegadores web y dispositivos móviles.

  • Packages - Gran cantidad de paquetes que son fáciles de instalar y usar.

  • Meteor Galaxy - Servicio en la nube para el despliegue de la aplicación Meteor.

Ventajas

  • Los desarrolladores solo necesitan JavaScript para el desarrollo del lado del servidor y del cliente.
  • La codificación es muy simple y amigable para principiantes.
  • Las aplicaciones de meteoros son en tiempo real por defecto.
  • Los paquetes oficiales y comunitarios ahorran mucho tiempo.

Limitaciones

  • Meteor no es muy adecuado para aplicaciones grandes y complejas.

  • Hay mucha magia cuando se trabaja con Meteor, por lo que los desarrolladores pueden verse limitados de alguna manera.

En este capítulo, aprenderemos cómo instalar Meteor en el sistema operativo Windows. Antes de empezar a trabajar con Meteor, necesitaremosNodeJS. Si no lo tiene instalado, puede consultar los enlaces que se proporcionan a continuación.

Requisito previo

NodeJS es la plataforma necesaria para el desarrollo de Meteor. Si no tiene la configuración del entorno NodeJS lista, puede consultar nuestraNodeJS Environment Setup.

Instalar Meteor

Descargue el instalador oficial de meteoritos de esta página

Si ocurre algún error durante la instalación, intente ejecutar el instalador como administrador. Una vez que se complete la instalación, se le pedirá que cree una cuenta Meteor.

Cuando termine de instalar el instalador de Meteor, puede probar si todo está instalado correctamente ejecutando el siguiente código en la ventana del símbolo del sistema.

C:\Users\username>meteor

Lo siguiente será el resultado:

En este capítulo, aprenderemos cómo crear su primera aplicación Meteor.

Paso 1: crea la aplicación

Para crear la aplicación, ejecutaremos el meteor createcomando desde la ventana del símbolo del sistema. El nombre de la aplicación serámeteorApp.

C:\Users\username\Desktop\Meteor>meteor create meteorApp

Paso 2: ejecuta la aplicación

Podemos ejecutar la aplicación escribiendo el meteor mando.

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

Este comando iniciará varios procesos, que se pueden ver en la siguiente imagen.

Paso 3: verificar el resultado

Ahora, podemos abrir el http://localhost:3000/ dirección para ver cómo se ve nuestra primera aplicación Meteor.

Las plantillas de meteoritos utilizan tres etiquetas de nivel superior. Los dos primeros sonhead y body. Estas etiquetas realizan las mismas funciones que en HTML normal. La tercera etiqueta estemplate. Este es el lugar donde conectamos HTML a JavaScript.

Plantilla simple

El siguiente ejemplo muestra cómo funciona esto. Estamos creando una plantilla conname = "myParagraph"atributo. Nuestratemplate La etiqueta se crea debajo de la bodyelemento, sin embargo, necesitamos incluirlo antes de que se muestre en la pantalla. Podemos hacerlo usando{{> myParagraph}}sintaxis. En nuestra plantilla, usamos llaves dobles({{text}}). Este es un lenguaje de plantilla de meteorito llamadoSpacebars.

En nuestro archivo JavaScript, estamos configurando Template.myParagraph.helpers({})método que será nuestra conexión con nuestra plantilla. Solo estamos usandotext helper en este ejemplo.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <h1>Header</h1>
   {{> myParagraph}}
</body>
 
<template name = "myParagraph">
   <p>{{text}}</p>
</template>

meteorApp.js

if (Meteor.isClient) {
   
   // This code only runs on the client
   Template.myParagraph.helpers({
      text: 'This is paragraph...'
   });
}

Después de guardar los cambios, lo siguiente será el resultado:

Plantilla de bloque

En el siguiente ejemplo, estamos usando {{#each paragraphs}} para iterar sobre el paragraphs matriz y plantilla de retorno name = "paragraph" para cada valor.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{#each paragraphs}}
         {{> paragraph}}
      {{/each}}
   </div>
</body>
 
<template name = "paragraph">
   <p>{{text}}</p>
</template>

Necesitamos crear paragraphsayudante. Esta será una matriz con cinco valores de texto.

meteorApp.js

if (Meteor.isClient) {
   
   // This code only runs on the client
   Template.body.helpers({
      paragraphs: [
         { text: "This is paragraph 1..." },
         { text: "This is paragraph 2..." },
         { text: "This is paragraph 3..." },
         { text: "This is paragraph 4..." },
         { text: "This is paragraph 5..." }
      ]
   });
}

Ahora, podemos ver cinco párrafos en la pantalla.

En este capítulo, aprenderemos a usar MongoDB colecciones.

Crear una colección

Podemos crear una nueva colección con el siguiente código:

meteorApp.js

MyCollection = new Mongo.Collection('myCollection');

Agregar datos

Una vez que se crea la colección, podemos agregar datos usando el insert método.

meteorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

Buscar datos

Podemos usar el find método para buscar datos en la colección.

meteorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find().fetch();
console.log(findCollection);

La consola mostrará los datos que insertamos previamente.

Podemos obtener el mismo resultado agregando los parámetros de búsqueda.

meteorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find({key1: "value 1..."}).fetch();
console.log(findCollection);

Actualizar datos

El siguiente paso es actualizar nuestros datos. Después de haber creado una colección e insertado nuevos datos, podemos usar elupdate método.

meteorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find().fetch();
var myId = findCollection[0]._id;

var updatedData = {
   key1: "updated value 1...",
   key2: "updated value 2...",
   key3: "updated value 3...",
   key4: "updated value 4...",
   key5: "updated value 5..."
}

MyCollection.update(myId, updatedData);

var findUpdatedCollection = MyCollection.find().fetch();
console.log(findUpdatedCollection);

La consola mostrará que nuestra colección está actualizada.

Borrar datos

Los datos se pueden eliminar de la colección utilizando el removemétodo. Estamos poniendoid en este ejemplo como parámetro para borrar datos específicos.

meteorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find().fetch();
var myId = findCollection[0]._id;

MyCollection.remove(myId);

var findDeletedCollection = MyCollection.find().fetch();
console.log(findDeletedCollection);

La consola mostrará una matriz vacía.

Si queremos eliminar todo de la colección, podemos usar el mismo método, sin embargo, en lugar de id usaremos un objeto vacío {}. Necesitamos hacer esto en el servidor por razones de seguridad.

meteorApp.js

if (Meteor.isServer) {

   MyCollection = new Mongo.Collection('myCollection');

   var myData = {
      key1: "value 1...",
      key2: "value 2...",
      key3: "value 3...",
      key4: "value 4...",
      key5: "value 5..."
   }

   MyCollection.insert(myData);
   MyCollection.remove({});
	
   var findDeletedCollection = MyCollection.find().fetch();
   console.log(findDeletedCollection);
}

También podemos borrar datos usando otros parámetros. Como en el ejemplo anterior, Meteor nos obligará a hacer esto desde el servidor.

meteorApp.js

if (Meteor.isServer) {

   MyCollection = new Mongo.Collection('myCollection');

   var myData = {
      key1: "value 1...",
      key2: "value 2...",
      key3: "value 3...",
      key4: "value 4...",
      key5: "value 5..."
   }

   MyCollection.insert(myData);
   MyCollection.remove({key1: "value 1..."});
	
   var findDeletedCollection = MyCollection.find().fetch();
   console.log(findDeletedCollection);
}

Se puede ver que los datos se eliminan de la ventana de comandos.

En este capítulo, aprenderemos cómo trabajar con formas Meteor.

Entrada de texto

Primero, crearemos un form elemento con campo de entrada de texto y un botón de envío.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <form>
      <input type = "text" name = "myForm">
      <input type = "submit" value = "SUBMIT">
   </form>
</template>

En un archivo JavaScript, crearemos el submitevento. Necesitamos evitar el comportamiento de eventos predeterminado para evitar que el navegador se actualice. A continuación, tomaremos el contenido del campo de entrada y lo asignaremos atextValue variable.

En el siguiente ejemplo, solo registraremos ese contenido en la consola de desarrolladores. Y lo último que necesitamos es borrar el campo de entrada.

meteorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'submit form': function(event) {
         event.preventDefault();
         var textValue = event.target.myForm.value;
         console.log(textValue);
         event.target.myForm.value = "";
      }
   });
}

Cuando escribimos "Algún texto ..." en nuestro campo de entrada y lo enviamos, la consola registrará el texto que ingresamos.

Botones de radio

Se puede utilizar un concepto similar para los botones de opción.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <form>
      <input type = "radio" name = "myForm" value = "form-1">FORM 1
      <input type = "radio" name = "myForm" value = "form-2">FORM 2
      <input type = "submit" value = "SUBMIT">
   </form>
</template>

meteorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'submit form': function(event) {
         event.preventDefault();
         var radioValue = event.target.myForm.value;
         console.log(radioValue);
      }
   });
}

Cuando enviamos el primer botón, la consola mostrará el siguiente resultado.

Caja

El siguiente ejemplo muestra cómo utilizar las casillas de verificación. Puede ver que simplemente estamos repitiendo el mismo proceso.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <form>
      <input type = "checkbox" name = "myForm" value = "form-1">FORM 1
      <input type = "checkbox" name = "myForm" value = "form-2">FORM 2
      <input type = "submit" value = "SUBMIT">
   </form>
</template>

meteorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({
   
      'submit form': function(event) {
         event.preventDefault();
         var checkboxValue1 = event.target.myForm[0].checked;
         var checkboxValue2 = event.target.myForm[1].checked;
         console.log(checkboxValue1);
         console.log(checkboxValue2);
      }
   });
}

Una vez que se envía el formulario, la entrada marcada se registrará como true, mientras que el no marcado se registrará como false.

Seleccionar menú desplegable

En el siguiente ejemplo, aprenderemos a utilizar el selectelemento. Usaremos elchange evento para actualizar los datos cada vez que cambia la opción.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <select>
      <option name = "myOption" value = "option-1">OPTION 1</option>
      <option name = "myOption" value = "option-2">OPTION 2</option>
      <option name = "myOption" value = "option-3">OPTION 3</option>
      <option name = "myOption" value = "option-4">OPTION 4</option>
   </select>
</template>

meteorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'change select': function(event) {
         event.preventDefault();
         var selectValue = event.target.value;
         console.log(selectValue);
      }
   });
}

Si elegimos la tercera opción, la consola registrará el valor de la opción.

En este capítulo, aprenderemos a usar tag, class y idcomo selector de eventos. Trabajar con eventos es bastante sencillo.

Creemos tres elementos en la plantilla HTML. El primero esp, el segundo es myClass clase y la última es myId carné de identidad.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <p>PARAGRAPH...</p>
   <button class = "myClass">CLASS</button>
   <button id = "myId">ID</button>
</template>

En nuestro archivo JavaScript, estamos configurando tres eventos para tres elementos que creamos anteriormente. Puedes ver que solo estamos agregandop, .myClass y #myId después de la clickevento. Estos son losselectors que mencionamos anteriormente.

meteorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'click p': function() {
         console.log("The PARAGRAPH is clicked...");
      },

      'click .myClass': function() {
         console.log("The CLASS is clicked...");
      },

      'click #myId': function() {
         console.log("The ID is clicked...");
      },
   });
}

Para probar esto, primero podemos hacer clic en PARAGRAPH, entonces la CLASS botón y finalmente el IDbotón. Obtendremos el siguiente registro de la consola.

Podemos usar todos los demás eventos de JavaScript: clic, dbclick, contextmenu, mousedown, mouseup, mouseover, mouseout, mousemove, siguiendo el ejemplo anterior.

Las sesiones se utilizan para guardar datos mientras los usuarios utilizan la aplicación. Estos datos se eliminarán cuando el usuario abandone la aplicación.

En este capítulo, aprenderemos cómo configurar un objeto de sesión, almacenar algunos datos y devolver esos datos. Usaremos la configuración básica de HTML.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
</template>

Ahora, almacenaremos myData usando localmente Session.set()método. Una vez que se establece el método, podemos devolverlo usandoSession.get() método.

meteorApp.js

if (Meteor.isClient) {
  
   var myData = {
      key1: "value1",
      key2: "value2"
   }

   Session.set('mySession', myData);

   var sessionDataToLog = Session.get('mySession');
   console.log(sessionDataToLog);
}

Si revisamos la consola, veremos que se registran los datos almacenados.

En el próximo capítulo, aprenderemos cómo actualizar automáticamente las plantillas usando la variable Session.

Tracker es una pequeña biblioteca que se utiliza para actualizar automáticamente las plantillas una vez que la variable de sesión ha cambiado. En este capítulo, aprenderemos cómo funciona el rastreador.

Primero, crearemos un button que se utilizará para actualizar la sesión.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <button id = "myButton">CLICK ME</button>
</template>

A continuación, estableceremos el valor de la sesión inicial. myData y crea un mySession objeto. Tracker.autorun El método se utiliza para vigilar mySession. Siempre que este objeto cambie, la plantilla se actualizará automáticamente. Para probarlo, configuraremos un evento de clic para actualizar.

meteorApp.js

if (Meteor.isClient) {
  
   var myData = 0
   Session.set('mySession', myData);

   Tracker.autorun(function () {
      var sessionData = Session.get('mySession');
      console.log(sessionData)
   });

   Template.myTemplate.events({

      'click #myButton': function() {
         Session.set('mySession', myData ++);
      }
   });
}

Si hacemos clic en el CLICK ME cinco veces, veremos que el rastreador está registrando nuevos valores cada vez que se actualiza la sesión.

Meteor ofrece miles de paquetes comunitarios que puede utilizar mientras desarrolla su aplicación.

Agregar paquetes

Puede consultar el servidor de paquetes oficial de Meteor aquí . Simplemente busque el paquete que necesita y agréguelo en la ventana del símbolo del sistema. Si, por ejemplo, desea agregarhttp paquete a su aplicación, puede hacerlo ejecutando el siguiente código:

C:\Users\username\Desktop\meteorApp>meteor add http

Eliminando paquetes

Se puede utilizar un principio similar para eliminar paquetes:

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

Actualización de paquetes

Puede actualizar el paquete ejecutando el siguiente código:

C:\Users\username\Desktop\meteorApp>meteor update http

Comprobación de paquetes actuales

También puede comprobar qué paquetes está utilizando su aplicación actual.

C:\Users\username\Desktop\meteorApp>meteor list

Mantenimiento del paquete

Si un paquete tiene : en el nombre, significa que es un paquete comunitario, mientras que los que no tienen el prefijo son mantenidos por el grupo Meteor Development.

Adición del paquete Meteor Development Group

C:\Users\username\Desktop\meteorApp>meteor add http

Agregar paquete comunitario

C:\Users\username\Desktop\meteorApp>meteor add cfs:http-methods

Si desea limitar el código para que se ejecute solo en el servidor o en el lado del cliente, puede usar el siguiente código:

meteorApp.js

if (Meteor.isClient) {
   // Code running on client...
}

if (Meteor.isServer) {
   // Code running on server...
}

Puede limitar el código para que se ejecute solo cuando la aplicación utilice la agrupación Cordova.

if (Meteor.isCordova) {
   // Code running on Cordova...
}

Algunos complementos deben esperar hasta que el servidor y DOM estén listos. Puede usar el siguiente código para esperar hasta que todo comience.

Meteor.startup(function () {
   // Code running after platform is ready...
});

La siguiente tabla enumera algunos otros métodos API principales.

No Señor. Método y detalles
1

Meteor.wrapAsync(function)

Se utiliza para envolver código asincrónico y convertirlo en síncrono.

2

Meteor.absoluteUrl([path], [options])

Se utiliza para generar una URL absoluta que apunta a la aplicación.

3

Meteor.settings

Se utiliza para configurar la implementación.

4

Meteor.publish(name, function)

Se utiliza para publicar registros para el cliente.

El método de verificación se utiliza para averiguar si el argumento o los tipos coinciden con el patrón.

Instalación de Check Package

Abra la ventana del símbolo del sistema e instale el paquete.

C:\Users\username\Desktop\meteorApp>meteor add check

Usando Cheque

En el siguiente ejemplo, queremos comprobar si myValuees una cuerda. Dado que es cierto, la aplicación continuará sin errores.

meteorApp.js

var myValue = 'My Value...';
check(myValue, String);

En este ejemplo, myValue no es una cadena sino un número, por lo tanto, la consola registrará un error.

meteorApp.js

var myValue = 1;
check(myValue, String);

Prueba de coincidencia

los Match.test es similar a comprobar, la diferencia es que cuando la prueba falla en lugar de un error de consola, obtendremos un valuesin romper el servidor. El siguiente ejemplo muestra cómo probar un objeto con varias claves.

meteorApp.js

var myObject = {
   key1 : "Value 1...",
   key2 : "Value 2..."
}

var myTest = Match.test(myObject, {
   key1: String,
   key2: String
});

if ( myTest ) {
   console.log("Test is TRUE...");
} else {
   console.log("Test is FALSE...");
}

Dado que ambas teclas son cadenas, la prueba es true. La consola registrará la primera opción.

Si cambiamos el key2 al número, la prueba fallará y la consola registrará la segunda opción.

meteorApp.js

var myObject = {
   key1 : "Value 1...",
   key2 : 1
}

var myValue = 1;

var myTest = Match.test(myObject, {
   key1: String,
   key2: String
});

if ( myTest ) {
   console.log("Test is TRUE...");
} else {
   console.log("Test is FALSE...");
}

Blaze es un paquete Meteor para crear plantillas reactivas en vivo.

Método de renderizado

Este método se utiliza para representar plantillas en el DOM. Primero, crearemosmyNewTemplateque se rendirá. También agregaremosmyContainer, que se utilizará como elemento padre, por lo que render El método sabe dónde renderizar nuestra plantilla.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div id = "myContainer">
   </div>
</body>

<template name = "myNewTemplate">
   <p>Text from my new template...</p>
</template>

A continuación, crearemos una función de renderización que tomará dos argumentos. El primero es una plantilla que se renderizará y el segundo es un elemento padre que mencionamos anteriormente.

meteorApp.js

Meteor.startup(function () {

   if(Meteor.isClient) {
      var myNewTemplate = Template.myNewTemplate;
      var myContainer = document.getElementById('myContainer');
      Blaze.render(myNewTemplate, myContainer);
   }
});

Renderizar con datos

Si necesita pasar algunos datos de forma reactiva, puede usar renderWithDatamétodo. El HTML será exactamente el mismo que en el ejemplo anterior.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div id = "myContainer">
   </div>
</body>

<template name = "myNewTemplate">
   <p>Text from my new template...</p>
</template>

Podemos agregar nuestros datos como un segundo argumento en Meteor.renderWithDatamétodo. Los otros dos argumentos son los mismos que en el ejemplo anterior. En este ejemplo, nuestros datos son una función que registrará texto.

meteorApp.js

Meteor.startup(function () {

   if(Meteor.isClient) {
      var myNewTemplate = Template.myNewTemplate;
		
      var myData = function() {
         console.log('Log from the data object...')
      }

      var myContainer = document.getElementById('myContainer');
      Blaze.renderWithData(myNewTemplate, myData, myContainer);
   }
});

Eliminar método

Podemos agregar remove método.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div id = "myContainer">
   </div>
</body>

<template name = "myNewTemplate">
   <p>Text from my new template...</p>
</template>

En este ejemplo, estamos renderizando la plantilla que se eliminará después de tres segundos. Observe laBlaze.Remove método que estamos usando para eliminar la plantilla.

meteorApp.js

Meteor.startup(function () {

   if(Meteor.isClient) {
      var myNewTemplate = Template.myNewTemplate;
      var myContainer = document.getElementById('myContainer');
      var myRenderedTemplate = Blaze.render(myNewTemplate, myContainer);

      Meteor.setTimeout(function() {
         Blaze.remove(myRenderedTemplate);
      }, 3000);
   }
});

La siguiente tabla muestra los otros métodos que se pueden utilizar.

No Señor. Método y detalles
1

Blaze.getData([elementOrView])

Se utiliza para recuperar datos del elemento de representación.

2

Blaze.toHTML(templateOrView)

Se utiliza para representar plantillas o vistas en la cadena.

3

Blaze.toHTMLWithData(templateOrView, data)

Se utiliza para representar plantillas o vistas en la cadena con datos adicionales.

4

new Blaze.View([name], renderFunction)

Se utiliza para crear una nueva parte reactiva de Blaze del DOM.

5

Blaze.currentView

Se usa para obtener la vista actual.

6

Blaze.getView([element])

Se usa para obtener la vista actual.

7

Blaze.With(data, contentFunc)

Se utiliza para construir una vista que presenta algún contenido con contexto.

8

Blaze.If(conditionFunc, contentFunc, [elseFunc])

Se utiliza para construir una vista que presenta algún contenido condicional.

9

Blaze.Unless(conditionFunc, contentFunc, [elseFunc])

Se usa para construir una vista que presenta algún contenido condicional (invertido Blaze.if).

10

Blaze.Each(argFunc, contentFunc, [elseFunc])

Se usa para construir una vista que renderiza contentFunct para cada artículo.

11

new Blaze.Template([viewName], renderFunction)

Se utiliza para construir una nueva vista de Blaze con nombre y contenido.

12

Blaze.isTemplate(value)

Se usa para devolver verdadero, si el valor es un objeto de plantilla.

Meteor ofrece su propio setTimeout y setIntervalmétodos. Estos métodos se utilizan para asegurarse de que todas las variables globales tengan valores correctos. Funcionan como JavaScript normalsetTimout y setInterval.

Se acabó el tiempo

Esto es Meteor.setTimeout ejemplo.

Meteor.setTimeout(function() {
   console.log("Timeout called after three seconds...");
}, 3000);

Podemos ver en la consola que la función de tiempo de espera se llama una vez iniciada la aplicación.

Intervalo

El siguiente ejemplo muestra cómo configurar y borrar un intervalo.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <button>CLEAR</button>
</template>

Estableceremos la inicial counter variable que se actualizará después de cada llamada de intervalo.

meteorApp.js

if (Meteor.isClient) {

   var counter = 0;

   var myInterval = Meteor.setInterval(function() {
      counter ++
      console.log("Interval called " + counter + " times...");
   }, 3000);

   Template.myTemplate.events({

      'click button': function() {
         Meteor.clearInterval(myInterval);
         console.log('Interval cleared...')
      }
   });
}

La consola registrará la actualización countervariable cada tres segundos. Podemos detener esto haciendo clic en elCLEARbotón. Esto llamará alclearInterval método.

EJSON es una extensión de la sintaxis JSON que admite Date y Binary tipos.

Instalar EJSON

Para instalar el paquete EJSON, debemos agregarlo desde la ventana del símbolo del sistema.

C:\Users\username\Desktop\meteorApp>meteor add ejson

Ejemplo de fecha

Podemos deserializar el date utilizando el parse método.

if (Meteor.isClient) {
   var myEjsonDate = '{"$date": 1455029631493}';
   var myDate = EJSON.parse(myEjsonDate);
   console.log(myDate);
}

La consola registrará el valor de fecha correcto.

Ejemplo binario

Lo mismo se puede aplicar a los tipos binarios.

if (Meteor.isClient) {
   var myEjsonBinary = '{"$binary": "c3VyZS4="}';
   var myBinary = EJSON.parse(myEjsonBinary);
   console.log(myBinary);
}

Puede ver que la consola está registrando un nuevo valor deserializado.

Stringify

Podemos serializar un objeto usando el stringifymétodo. Este es el proceso inverso del ejemplo anterior.

if (Meteor.isClient) {

   var myObject = {
      myDate : new Date(),
      myBinary : new Uint8Array([115, 117, 114, 101, 46])
   }

   var myEjosnData = EJSON.stringify(myObject);
   console.log(myEjosnData);
}

Podemos ver nuestros nuevos valores en la consola.

No Señor. Método y detalles
1

EJSON.parse(string)

Se utiliza para analizar una cadena en un valor EJSON.

2

EJSON.stringify(value)

Se utiliza para serializar un valor en la cadena.

3

EJSON.fromJSONValue(value)

Se utiliza para deserializar un valor EJSON de JSON.

4

EJSON.toJSONValue(value)

Se utiliza para serializar un valor EJSON en JSON.

5

EJSON.equals(value1, value2)

Se utiliza para comparar si dos valores son iguales.

6

EJSON.clone(value)

Se utiliza para devolver una copia detallada del valor.

7

EJSON.newBinary

Se utiliza para asignar datos binarios que EJSON puede serializar.

8

EJSON.isBinary(x)

Se utiliza para comprobar si el valor es un dato binario.

9

EJSON.addType(name, factory)

Se utiliza para crear un tipo EJSON personalizado.

10

customType.typeName()

Se utiliza para devolver un nombre del tipo personalizado.

11

customType.toJSONValue()

Se utiliza para serializar tipos personalizados.

12

customType.clone()

Se utiliza para devolver una copia detallada del tipo personalizado.

13

customType.equals(otherValue)

Se utiliza para comparar entre el valor de tipo personalizado y otro valor.

Este paquete proporciona API de solicitud HTTP con get, post, put y delete métodos.

Paquete de instalación

Instalaremos este paquete ejecutando el siguiente código en la ventana del símbolo del sistema.

C:\Users\username\Desktop\meteorApp>meteor add http

Método CALL

Este es un método universal que puede utilizar GET, POST, PUT y DELETEargumentos. El siguiente ejemplo demuestra cómo utilizarGETargumento. Los ejemplos de este capítulo utilizarán una API REST falsa de este sitio web .

Puede ver que este método utiliza cuatro argumentos. Ya mencionamos el primer argumentoGET. El segundo es la URL de la API. El tercer argumento es un objeto vacío, donde podemos establecer algunos parámetros opcionales. El último método es una devolución de llamada asincrónica, donde podemos manejar errores y trabajar con una respuesta.

HTTP.call( 'GET', 'http://jsonplaceholder.typicode.com/posts/1', {},
   function( error, response ) {

   if (error) {
      console.log(error);
   } else {
      console.log(response);
   }
});

Método GET

La misma solicitud se puede enviar utilizando GET en vez de CALLmétodo. Puede ver que el primer argumento ahora es la URL de la API.

HTTP.get('http://jsonplaceholder.typicode.com/posts/1', {}, function( error, response ) {

   if ( error ) {
      console.log( error );
   } else {
      console.log( response );
   }
});

Los dos ejemplos anteriores registrarán la misma salida.

Método POST

En este método, estamos configurando datos que deben enviarse al servidor (postData) como segundo argumento. Todo lo demás es igual que en nuestroGET solicitud.

var postData = {

   data: {
      "name1": "Value1",
      "name2": "Value2",
   }
}

HTTP.post( 'http://jsonplaceholder.typicode.com/posts', postData, 
   function( error, response ) {

   if ( error ) {
      console.log( error );
   } else {
      console.log( response);
   }
});

La consola registrará nuestro postData objeto.

Método PUT

Podemos actualizar nuestros datos utilizando el PUTmétodo. El concepto es el mismo que en nuestro último ejemplo.

var updateData = {

   data: {
      "updatedName1": "updatedValue1",
      "UpdatedName2": "updatedValue2",
   }
}

HTTP.put( 'http://jsonplaceholder.typicode.com/posts/1', updateData, 
   function( error, response ) {
	
   if ( error ) {
      console.log( error );
   } else {
      console.log( response );
   }
});

Ahora, podemos ver nuestro objeto actualizado en la consola.

Método DEL

Podemos enviar una solicitud de eliminación al servidor utilizando el DELmétodo. Borraremos todo dentro deldata objeto.

var deleteData = {
   data: {}
}

HTTP.del( 'http://jsonplaceholder.typicode.com/posts/1', deleteData, 
   function( error, response ) {
	
   if ( error ) {
      console.log( error );
   } else {
      console.log( response );
   }
});

La consola mostrará que el proceso de eliminación se ha realizado correctamente.

Este paquete se utiliza cuando necesita enviar un correo electrónico desde la aplicación Meteor.

Paso 1: agregar paquete

Abra la ventana del símbolo del sistema y ejecute el siguiente comando:

C:\Users\username\Desktop\meteorApp>meteor add email

Paso 2 - Cuenta Mailgun

Necesitamos crear una cuenta aquí . Este es el proveedor de correo electrónico predeterminado para las aplicaciones Meteor.

Una vez que haya iniciado sesión, abra el Domains pestaña y haga clic en el sandbox URL bajo el Domain Name. Abrirá una nueva página donde podemos encontrarDefault SMTP Login y Default Password. Necesitaremos estos dos para crear elMAIL_URL Variable ambiental.

Enviar correo electrónico

Para crear una válida MAIL_URL simplemente inserte sus credenciales de Mailgun en lugar de YOUR_DEFAULT_SMTP_LOGIN y YOUR_DEFAULT_PASSWORD.

if (Meteor.isServer) {

   Meteor.startup( function() {
      process.env.MAIL_URL = 
         "smtp://YOUR_DEFAULT_SMTP_LOGIN:[email protected]:587";

      Email.send({
         to: "[email protected]",
         from: "[email protected]",
         subject: "Meteor Email",
         text: "The email content..."
      });
   });
}

Cuando ejecute la aplicación, el correo electrónico se enviará a su dirección.

Los activos del servidor estático se encuentran en un privatesubcarpeta dentro de la aplicación. En el siguiente ejemplo, aprenderemos a usar datos de un archivo JSON simple.

Paso 1: crear archivos y carpetas

Vamos a crear un private carpeta y my-json.jsonarchivo dentro de esa carpeta. Haremos esto usando el siguiente comando en elcommand prompt ventana, sin embargo, también puede crearla manualmente.

C:\Users\username\Desktop\meteorApp>mkdir private

C:\Users\username\Desktop\meteorApp\private>touch my-json.json

Paso 2: obtener texto

Para poder leer datos de nuestro archivo, usaremos Asssets.getTextmétodo. Tenga en cuenta que esto solo se puede hacer desde el lado del servidor. Dado que estamos usando JSON, necesitamos analizarlo.

if (Meteor.isServer) {
   var myFile = JSON.parse(Assets.getText('my-json.json'));
   console.log(myFile.data.text)
}

Lo siguiente será el resultado en la ventana del símbolo del sistema.

Paso 3: crear un archivo EJSON

Crearemos este archivo dentro del privatecarpeta. Este archivo contendrá datos binarios"myBinary": {"$binary": "c3VyZS4="}

C:\Users\username\Desktop\meteorApp\private>touch my-ejson.ejson

Paso 4: obtener binario

Para leer archivos EJSON, podemos usar el Assets.getBinary método.

if (Meteor.isServer) {
   var myFile = Assets.getBinary('my-ejson.ejson');
   console.log(EJSON.stringify(myFile));
}

El símbolo del sistema registrará el valor EJSON.

En este capítulo, aprenderemos cómo proteger nuestra aplicación y qué se debe tener en cuenta al desarrollar una aplicación.

Publicación automática y seguridad automática

Autopublishes un paquete que publica automáticamente todos los datos de la base de datos al cliente. Esta es una conveniencia que debe desactivarse cuando esté en producción. Se puede desactivar desde el símbolo del sistema.

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

Puede publicar algunos datos en el cliente utilizando Meteor.publish() y Meteor.subscribe() métodos que cubriremos en el capítulo Publicar y Suscribir.

Insecurees un paquete que permite escribir comandos de MongoDB en la consola del desarrollador, de modo que todos los usuarios de la aplicación puedan acceder a la base de datos. El paquete se puede eliminar ejecutando el siguiente comando en el símbolo del sistema.

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

Una buena práctica es eliminar ambos paquetes tan pronto como comience a desarrollar su aplicación, para que no tenga que cambiar y actualizar su código más tarde.

Usar métodos del lado del servidor

Siempre debe crear sus métodos en el servidor. Puedes hacerlo usando elMeteor.methods() en el servidor y Meteor.call()en el cliente. Aprenderemos más sobre esto en el capítulo Métodos.

Seguridad adicional

Si desea agregar capas adicionales de seguridad a su aplicación, debe considerar el uso de otros paquetes de Meteor como:

  • La política del navegador se puede utilizar para controlar los recursos externos que deben cargarse en su aplicación.

  • Verificar paquete se puede utilizar para verificar los tipos de entrada del usuario antes de procesarlos.

  • Audit Arguments Check es un paquete que asegurará que todos los parámetros se verifiquen correctamente antes de procesarlos. Si perdió algunos parámetros, este paquete le informará.

  • Los paquetes de Mylar pueden agregar algunas capas adicionales de seguridad. Puede consultarlos si necesita ese tipo de protección.

Podemos ordenar los datos una vez que los obtengamos de la base de datos. En el siguiente ejemplo, crearemosUserscolección. Usaremos unsort argumento ({sort: {name: 1}}) para clasificar los datos de la colección por nombre. El número1se utiliza para establecer el orden ascendente. Si queremos usar el orden descendente, usaríamos-1 en lugar.

Users = new Mongo.Collection('users');

Users.insert({
   name: 'James',
   email: '[email protected]',
   joined: new Date(2016, 2, 23)
});

Users.insert({
   name: 'John',
   email: '[email protected]',
   joined: new Date(2016, 2, 19)
});

Users.insert({
   name: 'Jennifer',
   email: '[email protected]',
   joined: new Date(2016, 6, 24)
});

var sortByName = Users.find({}, {sort: {name: 1}}).fetch();

var sortByEmail = Users.find({}, {sort: {email: 1}}).fetch();

var sortByJoined = Users.find({}, {sort: {joined: 1}}).fetch();

console.log(sortByName);
console.log(sortByEmail);
console.log(sortByJoined);

Podemos ordenar los datos por correo electrónico de la misma manera.

Users = new Mongo.Collection('users');

Users.insert({
   name: 'James',
   email: '[email protected]',
   joined: new Date(2016, 2, 23)
});

Users.insert({
   name: 'John',
   email: '[email protected]',
   joined: new Date(2016, 2, 19)
});

Users.insert({
   name: 'Jennifer',
   email: '[email protected]',
   joined: new Date(2016, 6, 24)
});

var sortByEmail = Users.find({}, {sort: {email: 1}}).fetch();

console.log(sortByEmail);

Finalmente, podemos ordenarlo por la fecha de unión.

Users = new Mongo.Collection('users');

Users.insert({
   name: 'James',
   email: '[email protected]',
   joined: new Date(2016, 2, 23)
});

Users.insert({
   name: 'John',
   email: '[email protected]',
   joined: new Date(2016, 2, 19)
});

Users.insert({
   name: 'Jennifer',
   email: '[email protected]',
   joined: new Date(2016, 6, 24)
});

var sortByJoined = Users.find({}, {sort: {joined: 1}}).fetch();

console.log(sortByJoined);

Este paquete permite una funcionalidad de autenticación de usuario completa. Puede agregarlo ejecutando el siguiente código en la ventana del símbolo del sistema.

C:\Users\username\Desktop\meteorApp>meteor add accounts-password

Ejemplo de autenticación

Este ejemplo mostrará la autenticación básica. Nosotros crearemosregister, loginy homeplantillas. Si hay uncurrentUser (si el usuario se registró o inició sesión correctamente), el homeSe mostrará la plantilla. Si no haycurrentUser, la register y login Las plantillas serán visibles.

meteorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   {{#if currentUser}}
      {{> home}}
      {{else}}
      {{> register}}
      {{> login}}
   {{/if}}
</body>

<template name = "register">
   <h2>REGISTER:</h2>
   <form>
      <input type = "email" name = "registerEmail"><br>
      <input type = "password" name = "registerPassword"><br>
      <input type = "submit" value = "Register"><br>
   </form>
</template>

<template name = "login">
   <h2>LOGIN:</h2>
   <form>
      <input type = "email" name = "loginEmail"><br>
      <input type = "password" name="loginPassword"><br>
      <input type = "submit" value = "Login"><br>
   </form>
</template>

<template name = "home">
   <p>You're logged in.</p>
   <button class = "logout">Logout</button>
</template>

Primero, necesitamos crear un registerevento. Esta función leerá las entradas del registro, creará un nuevo usuario y lo almacenará en la base de datos.

El segundo evento es login. Esta vez, la función leerá las entradas dellogin plantilla, inicie sesión como usuario si el correo electrónico y la contraseña son válidos o devuelva un error si no lo son.

Y finalmente el logout El evento se utilizará para cerrar la sesión del usuario, una vez que se haga clic en el botón.

meteorApp.js

if (Meteor.isClient) {

   Template.register.events({
      'submit form': function(event) {
         event.preventDefault();

         var registerData = {
            email: event.target.registerEmail.value,
            password: event.target.registerPassword.value
         }

         Accounts.createUser(registerData, function(error) {
         
            if (Meteor.user()) {
               console.log(Meteor.userId());
            } else {
               console.log("ERROR: " + error.reason);
            }
         });
      }
   });

   Template.login.events({
   
      'submit form': function(event) {
         event.preventDefault();
         var myEmail = event.target.loginEmail.value;
         var myPassword = event.target.loginPassword.value;
			
         Meteor.loginWithPassword(myEmail, myPassword, function(error) {

            if (Meteor.user()) {
               console.log(Meteor.userId());
            } else {
               console.log("ERROR: " + error.reason);
            }
         });
      }
   });

   Template.home.events({

      'click .logout': function(event) {
         event.preventDefault();
			
         Meteor.logout(function(error) {

            if(error) {
               console.log("ERROR: " + error.reason);
            }
         });
      }
   });
}

Una vez que se inicia la aplicación, obtendremos la siguiente página.

Al ingresar el correo electrónico y la contraseña en el registerformulario, podemos registrar e iniciar sesión como nuevo usuario. Veremos que la consola registra a los usuariosid y el home se renderiza la plantilla.

los loginevent comprobará la base de datos e iniciará la sesión del usuario, si el correo electrónico y la contraseña son correctos. De lo contrario, la consola registrará un error.

Si el usuario hace clic en el LOGOUT , la aplicación cerrará la sesión del usuario y mostrará el register y login plantillas.

Los métodos Meteor son funciones que se escriben en el lado del servidor, pero se pueden llamar desde el lado del cliente.

En el lado del servidor, crearemos dos métodos simples. El primero agregará 5 a nuestro argumento, mientras que el segundo agregará10.

Usando métodos

meteorApp.js

if(Meteor.isServer) {

   Meteor.methods({

      method1: function (arg) {
         var result = arg + 5;
         return result;
      },

      method2: function (arg) {
         var result = arg + 10;
         return result;
      }
   });
}

if(Meteor.isClient) {
   var aaa = 'aaa'
   Meteor.call('method1', aaa, function (error, result) {
	
      if (error) {
         console.log(error);
         else {
            console.log('Method 1 result is: ' + result);
         }
      }
   );

   Meteor.call('method2', 5, function (error, result) {

      if (error) {
         console.log(error);
      } else {
         console.log('Method 2 result is: ' + result);
      }
   });
}

Una vez que iniciemos la aplicación, veremos los valores calculados en la consola.

Manejo de errores

Para manejar errores, puede utilizar el Meteor.Errormétodo. El siguiente ejemplo muestra cómo manejar los errores para los usuarios que no han iniciado sesión.

if(Meteor.isServer) {

   Meteor.methods({

      method1: function (param) {

         if (! this.userId) {
            throw new Meteor.Error("logged-out",
               "The user must be logged in to post a comment.");
         }
         return result;
      }
   });
}

if(Meteor.isClient) {  Meteor.call('method1', 1, function (error, result) {

   if (error && error.error === "logged-out") {
      console.log("errorMessage:", "Please log in to post a comment.");
   } else {
      console.log('Method 1 result is: ' + result);
   }});

}

La consola mostrará nuestro mensaje de error personalizado.

En este capítulo, aprenderemos cómo crear nuestro propio paquete de meteoritos.

Crear un paquete

Agreguemos una nueva carpeta en el escritorio, donde se creará el paquete. Usaremos la ventana del símbolo del sistema.

C:\Users\username\Desktop\meteorApp> mkdir packages

Ahora, podemos crear el paquete en la carpeta que hemos creado anteriormente. Ejecute el siguiente comando desde el símbolo del sistema.Username es el nombre de usuario de Meteor Developer y package-name es el nombre del paquete.

C:\Users\username\Desktop\meteorApp\packages>meteor create --package username:package-name

Agregar un paquete

Para poder agregar un paquete local a nuestra aplicación, necesitamos configurar el ENVIRONMENT VARIABLEeso le dirá a Meteor que cargue el paquete desde la carpeta local. Haga clic con el botón derecho en el icono de la computadora y elijaproperties/Advanced system settings/Environment Variables/NEW.

Variable Name debiera ser PACKAGE_DIRS. Variable Valuedebería ser la ruta a la carpeta que creamos. En nuestro caso,C:\Users\username\Desktop\meteorApp\packages.

No olvide reiniciar el command prompt después de agregar una nueva variable de entorno.

Ahora podemos agregar el paquete a nuestra aplicación ejecutando el siguiente código:

C:\Users\username\Desktop\meteorApp>meteor add username:package-name

Archivos de paquete

Los siguientes cuatro archivos se encontrarán en el paquete que creamos.

  • package-name-test.js
  • package-name.js
  • package.js
  • README.md

Paquete de prueba (nombre-paquete-prueba.js)

Ofertas de meteoritos tinytestpaquete para probar. Instalemos primero usando el siguiente comando en la ventana del símbolo del sistema.

C:\Users\username\Desktop\meteorApp>meteor add tinytest

Si abrimos package-name-test.js, veremos el ejemplo de prueba predeterminado. Usaremos este ejemplo para probar la aplicación. Nota: Siempre es mejor escribir nuestras propias pruebas al desarrollar paquetes de meteoritos.

Para probar el paquete, ejecutemos este código en el símbolo del sistema.

C:\Users\username\Desktop>meteor test-packages packages/package-name

Obtendremos el siguiente resultado.

Archivo package.js

Este es el archivo donde podemos escribir el código. Creemos una funcionalidad simple para nuestro paquete. Nuestro paquete registrará texto en la consola.

paquetes / paquete.js

myPackageFunction = function() {
   console.log('This is simple package...');
}

Archivo package-name.js

Este es el archivo donde podemos establecer alguna configuración de paquete. Volveremos a ello más tarde, pero por ahora necesitamos exportarmyPackageFunctionpara que podamos usarlo en nuestra aplicación. Necesitamos agregar esto dentroPackage.onUsefunción. El archivo se verá así.

paquetes / nombre-paquete.js

Package.describe({
   name: 'username:package-name',
   version: '0.0.1',
   
   // Brief, one-line summary of the package.
   summary: '',
   
   // URL to the Git repository containing the source code for this package.
   git: '',
   
   // By default, Meteor will default to using README.md for documentation.
   
   // To avoid submitting documentation, set this field to null.
   documentation: 'README.md'
});

Package.onUse(function(api) {
   api.versionsFrom('1.2.1');
   api.use('ecmascript');
   api.addFiles('mypackage.js');
   api.export('myPackageFunction'); // We are exporting the function we created above...
});

Package.onTest(function(api) {
   api.use('ecmascript');
   api.use('tinytest');
   api.use('username:package-name');
   api.addFiles('package-name-tests.js');
});

Usando un paquete

Ahora finalmente podemos llamar al myPackageFunction() de nuestro meteorApp.js archivo.

paquetes / paquete.js

if(Meteor.isClient) {
   myPackageFunction();
}

La consola registrará el texto de nuestro paquete.

Para comprender mejor cómo package.js se puede configurar el archivo, usaremos el ejemplo de la documentación oficial de Meteor.

Este es un archivo de ejemplo ...

/* Information about this package */
Package.describe({
   
   // Short two-sentence summary.
   summary: "What this does",

   // Version number.
   version: "1.0.0",

   // Optional.  Default is package directory name.
   name: "username:package-name",

   // Optional github URL to your source repository.
   git: "https://github.com/something/something.git",
});

/* This defines your actual package */
Package.onUse(function (api) {

   // If no version is specified for an 'api.use' dependency, use the
   // one defined in Meteor 0.9.0.
   api.versionsFrom('0.9.0');

   // Use Underscore package, but only on the server.
   // Version not specified, so it will be as of Meteor 0.9.0.
   api.use('underscore', 'server');

   // Use iron:router package, version 1.0.0 or newer.
   api.use('iron:[email protected]');

   // Give users of this package access to the Templating package.
   api.imply('templating')

   // Export the object 'Email' to packages or apps that use this package.
   api.export('Email', 'server');

   // Specify the source code for the package.
   api.addFiles('email.js', 'server');
});

/* This defines the tests for the package */
Package.onTest(function (api) {

   // Sets up a dependency on this package
   api.use('username:package-name');

   // Allows you to use the 'tinytest' framework
   api.use('[email protected]');

   // Specify the source code for the package tests
   api.addFiles('email_tests.js', 'server');
});

/* This lets you use npm packages in your package*/
Npm.depends({
   simplesmtp: "0.3.10",
   "stream-buffers": "0.2.5"
});

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 la 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 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 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.

Meteor ofrece algunas carpetas especiales que pueden ayudar a los desarrolladores a estructurar sus aplicaciones.

cliente

Si crea un clientcarpeta, todo dentro de esta carpeta se ejecutará en el lado del cliente. Esta es la carpeta donde puede colocar suHTML, CSSy del lado del cliente JavaScript. Deberías colocarMeteor.subscribe funciones, templates, helpersy eventsdentro de esta carpeta. Tenga en cuenta que no es necesario ejecutar elMeteor.isClient función en los archivos que se colocan dentro del client carpeta.

servidor

Los archivos de esta carpeta solo se ejecutarán en el server side. Este es el lugar dondemethods, Meteor.Publish()funciones y otros datos sensibles deben conservarse. Todos los datos de autenticación deben guardarse aquí. No necesitas usarMeteor.isServer() para los archivos dentro de esta carpeta.

público

Este es el lugar donde debe colocar sus imágenes, favicons y todos los demás datos que se le entregan al cliente.

privado

Solo se puede acceder a los archivos de esta carpeta desde el servidor. Estarán ocultos al cliente. Puedes ponerJSON o EJSON archivos que solo el servidor usará dentro de esta carpeta.

cliente / compatibilidad

Algunas bibliotecas de JavaScript exportan variables como globales. Utilice esta carpeta para los archivos que deben ejecutarse sin estar envueltos en un nuevo ámbito de variable.

El resto

El resto de carpetas se pueden estructurar de la forma que desee. El código que se coloca fuera de las carpetas mencionadas anteriormente se ejecutará en elclient y el serverlado. Este es un buen lugar donde puede definir sus modelos.

Orden de carga

Siempre es bueno saber el orden de carga de los archivos. La siguiente lista está extraída de la documentación oficial de Meteor.

  • Los archivos de plantilla HTML siempre se cargan antes que todo lo demás

  • Archivos que comienzan con main. se cargan al final

  • Archivos dentro de cualquier lib/ el directorio se carga a continuación

  • Los archivos con rutas más profundas se cargan a continuación.

  • Luego, los archivos se cargan en orden alfabético de la ruta completa

Una de las mejores cosas de Meteor es lo fácil que es implementar la aplicación. Una vez que su aplicación está completa, hay una manera fácil de compartirla con el mundo. Todo lo que tiene que hacer es ejecutar el siguiente código en la ventana del símbolo del sistema.

C:\Users\username\Desktop\meteorApp>meteor deploy my-first-app-ever.meteor.com

Se le pedirá que ingrese a la cuenta de desarrolladores de Meteor username y password.

Ahora, podrá acceder a la aplicación desde el navegador en el siguiente enlace que tiene el nombre de su aplicación.

http://my-first-app-ever.meteor.com/

En este capítulo, aprenderemos cómo ejecutar la aplicación en un dispositivo Android. Meteor acaba de agregar esta funcionalidad para el sistema operativo Windows, por lo que necesitaremos actualizar nuestra aplicación de meteoritos a la versión 1.3 beta.

Note- En el momento de escribir este tutorial, la versión 1.3 de Meteor está en Beta. Actualizaremos esto una vez que se lance la versión de producción.

Como queremos utilizar la versión más reciente de Meteor, podemos actualizarla ejecutando el siguiente código en la ventana del símbolo del sistema.

C:\Users\username\Desktop\meteorApp>meteor update --release 1.3-beta.11

Paso 1: instala el SDK de Android

Utilice el enlace de la siguiente tabla para instalar el SDK de Android.

No Señor. Software y descripción
1

Java Development Kit & Android SDK

Necesitará Android SDK para poder ejecutar aplicaciones Meteor en un entorno móvil. Si no lo tiene instalado, puede consultar nuestro tutorial de configuración del entorno de Android .

Paso 2: agregar una plataforma Android

Ahora, necesitamos agregar una plataforma Android a nuestro proyecto.

C:\Users\username\Desktop\meteorApp>meteor add-platform android

Paso 3: ejecuta la aplicación en un emulador de Android

Para ejecutar la aplicación en un emulador de Android, usaremos el –verbose comando al final de la línea para poder identificar los posibles errores durante el proceso de inicio.

C:\Users\username\Desktop\meteorApp>meteor run android --verbose

Ejecute la aplicación en un dispositivo Android

Dado que los emuladores de Android son lentos, siempre es una mejor opción ejecutar su aplicación directamente en su dispositivo. Puede hacerlo conectando el dispositivo a su computadora, habilitando el modo de desarrolladores y la depuración de USB.

Este proceso es diferente para dispositivos específicos. Necesitas encontrarBuild Number en settings/Abouty toque siete veces. Recibirá una notificación de que es el desarrollador y elDeveloper Options se desbloqueará.

Busque a través de su settings de nuevo y habilitar USB debugging.

Puede ejecutar la aplicación Meteor en su dispositivo móvil usando el siguiente comando en el símbolo del sistema.

C:\Users\username\Desktop\meteorApp>meteor run android-device

En este capítulo, aprenderemos cómo crear una aplicación de tareas sencilla.

Paso 1: crea una aplicación

Abra el símbolo del sistema y ejecute el siguiente comando:

C:\Users\username\Desktop>meteor create todo-app

Para ver la aplicación, debe ejecutar la aplicación con el meteor comando y ve a http://localhost:3000

C:\Users\username\Desktop\todo-app>meteor

Paso 2: crear carpetas y archivos

En lugar de la estructura de archivo predeterminada, la refactorizaremos. Vamos a crear unclient carpeta, donde crearemos todo-app.html, todo-app.css y todo-app.js.

C:\Users\username\Desktop\todo-app>mkdir client
C:\Users\username\Desktop\todo-app\client>touch todo-app.html
C:\Users\username\Desktop\todo-app\client>touch todo-app.js

También crearemos un server carpeta con server.js dentro.

C:\Users\username\Desktop\todo-app>mkdir server
C:\Users\username\Desktop\todo-app\server>touch server.js

Finalmente, creemos collections carpeta con task-collection.js archivo dentro.

C:\Users\username\Desktop\todo-app>mkdir server
C:\Users\username\Desktop\todo-app\collections>touch task-collection.js

Puede ver la estructura de la aplicación en la siguiente imagen:

Paso 3: cliente / todo-app.html

Nuestro primer paso de desarrollo es crear HTML para la aplicación. Necesitamos un campo de entrada donde podamos agregar nuevas tareas. Las tareas estarán en forma de lista condelete y checkfuncionalidad. También tendremos funcionalidades para mostrar u ocultar tareas completadas.

<head>
   <title>Todo App</title>
</head>

<body>
   <h1>Todo List ({{incompleteCount}})</h1>

   <label class = "hide-completed">
      <input type = "checkbox" checked = "{{hideCompleted}}" />
      Hide Completed Tasks
   </label>

   <form class = "new-task">
      <input type = "text" name = "text" placeholder = "Add new tasks" />
   </form>

   <ul>
      {{#each tasks}}
         {{> task}}
      {{/each}}
   </ul>
</body>

<template name = "task">
   <li class = "{{#if checked}}checked{{/if}}">
      <button class = "delete">x</button>
      <input type = "checkbox" checked = "{{checked}}" class = "toggle-checked" />
      <span>{{username}} - {{text}}</span>
   </li>
</template>

Paso 4: colecciones / task-collection.js

Este es el lugar donde simplemente crearemos una nueva colección MongoDB, para que podamos usarla tanto en el servidor como en el lado del cliente.

Tasks = new Mongo.Collection("tasks");

Paso 5 - server / server.js

Definiremos métodos para nuestra aplicación en el lado del servidor. Estos métodos se llamarán desde el cliente. En este archivo, también publicaremos la consulta de la base de datos.

// Publishing tasks from the server...

Meteor.publish("tasks", function () {
   return Tasks.find({});
});

// Methods for handling MongoDb Tasks collection data...

Meteor.methods({

   addTask: function (text) {

      Tasks.insert({
         text: text,
         createdAt: new Date(),
      });
   },

   deleteTask: function (taskId) {
      var task = Tasks.findOne(taskId);
      Tasks.remove(taskId);
   },

   setChecked: function (taskId, setChecked) {
      var task = Tasks.findOne(taskId);
      Tasks.update(taskId, { $set: { checked: setChecked} });
   }
});

Paso 6: cliente / todo-app.js

Este es el archivo JavaScript del cliente principal. Este archivo también se puede refactorizar, pero escribiremos todo el código del lado del cliente aquí. Primero, nos suscribimos altaskcolección que se publica en el servidor. Entonces, creamoshelpers para poder manejar la lógica de la aplicación, y finalmente, definimos el events que llamará a los métodos desde el servidor.

// Subscribing to the published tasks
Meteor.subscribe("tasks");

// Show/Hide functionality
Template.body.helpers({

   tasks: function () {

      if (Session.get("hideCompleted")) {

         // If hide completed is checked, filter tasks
         return Tasks.find({checked: {$ne: true}}, {sort: {createdAt: -1}}); } else { // Otherwise, return all of the tasks return Tasks.find({}, {sort: {createdAt: -1}}); } }, hideCompleted: function () { return Session.get("hideCompleted"); }, incompleteCount: function () { return Tasks.find({checked: {$ne: true}}).count();
   }
});

// Events for creating new tasks and Show/Hide functionality.
// Calling methods from the server

Template.body.events({

   "submit .new-task": function (event) {
      event.preventDefault();
      var text = event.target.text.value;

      Meteor.call("addTask", text);
      event.target.text.value = "";
   },

   "change .hide-completed input": function (event) {
      Session.set("hideCompleted", event.target.checked);
   }
});

// Events for Deleting and Check/Uncheck functionality
Template.task.events({
   
   "click .toggle-checked": function () {

      // Set the checked property to the opposite of its current value
      Meteor.call("setChecked", this._id, ! this.checked);
   },

   "click .delete": function () {
      Meteor.call("deleteTask", this._id);
   }
});

Paso 7: Implementar

Una vez que hayamos terminado con el desarrollo, podemos implementar la aplicación desde la ventana del símbolo del sistema. El nombre de implementación de nuestra aplicación serámy-first-todo-app.

C:\Users\username\Desktop\todo-app>meteor deploy my-first-todo-app

Podemos abrir el http://my-first-todo-app.meteor.com/ para comenzar a usar nuestra aplicación.

Ya cubrimos algunas de las mejores prácticas del desarrollo de Meteor en los capítulos anteriores. A continuación se presentan algunas de las mejores prácticas que se deben tener en cuenta al utilizar Meteor.

Estructura de directorios

No existen reglas estrictas sobre la estructura de directorios en las aplicaciones Meteor. Para obtener más información sobre las directrices, consulte el capítulo Meteor - Estructura .

Métodos de uso

Siempre debe utilizar Meteor - Methods cuando trabaje con datos confidenciales en lugar de llamarinsert, updatey remove directamente del cliente.

Gestión de datos

Proteja sus datos mediante los métodos Publicar y Suscribirse . Si desea que sus datos estén disponibles para todos los clientes, puede utilizarnullcomo el nombre de la publicación. La publicación de pequeños fragmentos de datos también mejorará el rendimiento de la aplicación.

Validar datos

Debe validar todos los datos que se almacenarán dentro de la colección. Una de las mejores opciones es el paquete collection2 . Este paquete facilita la configuración de la validación del lado del servidor y del cliente.

Minimizar sesión

los session las variables son variables globales y el uso de globales va en contra de las mejores prácticas de JavaScript.

Enrutador

Hay dos opciones más populares para el enrutamiento de meteoros. Para aplicaciones más pequeñas, existe Iron Router . Se vuelve a ejecutar automáticamente una vez que cambian los datos. Para aplicaciones más grandes, existe Flow Router . Este enrutador le brinda más libertad para optimizar la reproducción de las plantillas a costa de un poco más de código repetitivo.

Paquetes

Siempre verifique si el paquete se actualiza regularmente antes de optar por usarlo dentro de su aplicación.