Hace poco organicé un Meetup de Couchbase en Mountain View, California, sobre el tema de NativeScript, Angular y desarrollo NoSQL. Con un invitado especial, TJ VanToll de Progress, hablamos del desarrollo de aplicaciones móviles y de cómo Couchbase para el almacenamiento NoSQL y la sincronización de datos.

Couchbase MV Meetup June 2017

Hubo una buena asistencia al evento y, a petición popular, quise compartir y revisar el código utilizado para hacer posible el proyecto Couchbase.

Suponiendo que tienes el CLI NativeScript y Xcode o el SDK de Android instalado y configurado en tu máquina, podemos crear un nuevo proyecto desde el símbolo del sistema o Terminal:

En --ng en el comando anterior indica que estamos creando un proyecto Angular en lugar de un proyecto Core.

El proyecto que crearemos constará de dos páginas y un servicio de datos.

Couchbase with NativeScript Meetup Example

Dentro de la aplicación podrás mostrar una lista de películas almacenadas en tu base de datos, así como añadir películas a esa base de datos. Todo esto se gestiona a través del servicio de datos. Con Couchbase Sync Gateway disponible, la sincronización podrá ocurrir.

Añade los siguientes directorios y archivos a tu nuevo proyecto NativeScript:

En el desarrollo Angular, cada componente tendrá un archivo TypeScript y HTML. Cada servicio solo tendrá un archivo TypeScript.

Empecemos diseñando nuestro servicio de datos que manejará las interacciones con la base de datos Couchbase Lite instalada localmente. Abre el archivo app/providers/database.service.ts e incluya lo siguiente:

En el servicio anterior ocurren muchas cosas, así que deberíamos desglosarlas.

Después de importar todas las dependencias de los componentes y definir nuestras variables, tenemos nuestro constructor método:

En el constructor creamos y abrimos la base de datos NoSQL de Couchbase y creamos una vista que se utilizará para consultar los datos. La lógica de la vista dice que cuando se consulte, devuelva un par clave-valor por cada documento que tenga una propiedad llamada tipo que es igual a película. Cualquier otro documento que no cumpla esta condición no se incluirá en los resultados.

Al consultar la vista, recibiremos un array de resultados que podemos elegir para mostrar en pantalla. Esto es algo que haremos en el componente apropiado.

Para aprovechar el poder y la maravilla de Couchbase, queremos tener soporte de replicación / sincronización dentro de la aplicación. Dentro de la startReplication tenemos lo siguiente:

Si proporcionamos la información de nuestra instancia de Couchbase Sync Gateway, podemos replicar los datos en ambas direcciones continuamente. Como la aplicación móvil nunca lee los datos remotos, configuramos un escuchador de cambios cuando los datos locales cambian. Estos cambios se emiten a través de un emisor Angular.

Para poder inyectar este servicio de datos en cada uno de nuestros componentes, tenemos que importarlo en el directorio del proyecto @NgModule bloque. Abra el archivo app/app.module.ts y que tenga el siguiente aspecto:

Observe que el servicio se ha importado e incluido en el archivo proveedores de la @NgModule bloque. Adelantándonos, también hemos importado cada uno de los componentes que estamos creando.

Ahora pasemos al componente para añadir nuevas películas a la base de datos. Abra el proyecto app/components/create/create.component.ts e incluya el siguiente código TypeScript:

En el código anterior estamos inyectando el archivo Servicio de base de datos creado previamente junto con el Angular Ubicación servicio. Utilizando el Servicio de base de datos podemos obtener la instancia de la base de datos y guardar el entrada objeto cuando el guardar . La dirección entrada está vinculado a un formulario de la interfaz de usuario.

La interfaz de usuario de este componente puede describirse en el proyecto app/components/create/create.component.html file:

En el XML anterior, observe los dos Campo de texto están vinculadas a las etiquetas entrada mediante la variable Angular ngModel atributos.

La parte final de la aplicación NativeScript consiste en listar las películas que están en nuestra base de datos. Abre el archivo app/components/list/list.component.ts e incluya el siguiente código TypeScript:

De nuevo, estamos inyectando el Servicio de base de datosUbicaciónNgZone en el componente constructor método.

Nunca es una buena idea cargar datos en el constructor por lo que utilizaremos el método ngOnInit en su lugar:

Están ocurriendo algunas cosas en el ngOnInit método. Queremos cargar los datos de la base de datos, pero hay que hacerlo de dos maneras diferentes. Necesitamos cargar los datos al abrir la aplicación y necesitamos cargar los datos al navegar hacia atrás desde la pantalla de creación.

Porque el ngOnInit no se dispara al navegar hacia atrás, necesitamos suscribirnos a los eventos de localización. En ambos escenarios consultamos la vista que habíamos creado.

Dado que queremos soporte de sincronización, podemos llamar a la función startReplication y pase la información de la puerta de enlace de sincronización. Si está realizando pruebas localmente, asegúrese de proporcionar la información de host adecuada para Android e iOS.

Mientras se escuchan los cambios, cualquier dato que llegue debe buscarse por id y añadirse a la lista.

La interfaz de usuario que se empareja con el componente para listar películas se puede encontrar en la sección app/components/list/list.component.html file:

En el XML anterior, tenemos un simple ListView donde cada fila contiene información de los objetos que estamos almacenando en Couchbase.

Llevando la aplicación NativeScript a su fin, tenemos que arreglar nuestro archivo de enrutamiento que es responsable de la navegación. Abre el archivo app/app.routing.ts e incluir el siguiente TypeScript:

En el código anterior sólo estamos importando los dos componentes y listándolos como posibles rutas dentro de la aplicación. Más información sobre el enrutamiento con una aplicación NativeScript con Angular se puede encontrar en un artículo anterior que escribí titulado, Navegación de una aplicación NativeScript con el router Angular.

Recuerde, nuestro proyecto no sólo consiste en NativeScript, sino que también consiste en Sync Gateway que es una entidad separada. Tenemos que definir un archivo de configuración sobre cómo debe funcionar la sincronización.

Crea un archivo llamado, sync-gateway-config.json e incluyen lo siguiente:

Al lanzar Couchbase Sync Gateway, se debe utilizar la configuración anterior. Es sólo un ejemplo básico de lo que puedes lograr con la sincronización de datos.

Conclusión

Personalmente creo NativeScript es una gran tecnología para el desarrollo móvil. Al utilizar el plugin de Couchbase para NativeScript, que cuenta con el apoyo de la comunidad, puedes incluir NoSQL y soporte de sincronización de datos dentro de tu aplicación.

Si no está registrado en el Couchbase Silicon Valley y estás en la zona de Mountain View, te recomiendo que te tomes un momento para registrarte. Si estás interesado en ver más Couchbase con NativeScript en acción, echa un vistazo a un artículo anterior que escribí sobre aquí.

Para obtener más información sobre Couchbase Lite, consulte la página Portal para desarrolladores de Couchbase.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Dejar una respuesta