Uso de Couchbase Server y Couchbase Mobile en el mismo proyecto con Node.js

Crear aplicaciones web y aplicaciones móviles que compartan los mismos datos suele considerarse una tarea ardua. ¿Cómo diseñas tu aplicación web para que encaje con tu aplicación móvil y viceversa? ¿Qué pasa cuando quieres usar Couchbase para sincronizar tus datos entre dispositivos móviles en tiempo real, pero también tenerlos disponibles en un navegador web?

Hay varias maneras de llevar a cabo esta tarea con Couchbase, pero vamos a explorar una de mis favoritas en esta guía en particular. Vamos a utilizar un SDK del lado del servidor para consultar datos y una API RESTful para escribir datos.

Requisitos

Para este ejemplo en particular vamos a usando Node.jspero realmente no importa el lenguaje que utilices siempre y cuando haya un SDK de Couchbase Server disponible. Los requisitos para este proyecto son los siguientes:

  • Servidor Couchbase 4.1+
  • Pasarela de sincronización Couchbase 1.3+
  • Node.js 4.0+

Desde el punto de vista de los componentes, Couchbase Server albergará todos nuestros datos. Además, será responsable del trabajo pesado que conlleva la consulta. No escribiremos directamente a Couchbase Server desde el SDK de Node.js, sino que usaremos Couchbase Sync Gateway. Sync Gateway guardará los datos en Couchbase Server y los pasará entre dispositivos móviles. Node.js será la capa de aplicación web.

No vamos a construir una aplicación móvil en este ejemplo en particular, pero una aplicación móvil se comunicaría con Sync Gateway y se utilizaría de manera similar. Las aplicaciones móviles no se comunican directamente con Couchbase Server.

Configuración de Couchbase Server y Couchbase Sync Gateway

Antes de poder desarrollar la aplicación, es necesario instalar y configurar tanto Couchbase Server como Couchbase Sync Gateway.

Descargar Couchbase Server para tu sistema operativo y procede a su instalación, asegurándote de que el servicio de consultas (N1QL) está habilitado. Para este ejemplo voy a utilizar un bucket de Couchbase llamado ejemplopero siéntete libre de llamarlo como quieras.

Con el ejemplo debe añadirse un índice N1QL para poder consultar los datos. Desde el Query Workbench o CBQ, ejecute lo siguiente:

Query Workbench está disponible en Couchbase Server Enterprise Edition, pero la herramienta de línea de comandos CBQ está disponible en ambas adiciones.

En este punto Couchbase Server está listo para funcionar.

Descarga e instala Couchbase Sync Gateway para tu sistema operativo. Sync Gateway en sí no estará configurado, pero tendremos un archivo de configuración del proyecto con el siguiente aspecto en ejecución:

Llamar al archivo anterior sync-gateway-config.json y almacenarlo en su proyecto. Básicamente, estamos diciendo a Sync Gateway que queremos conectarnos a un clúster de Couchbase Server en particular y utilizar el bucket ejemplo. Debido a que estaremos usando peticiones RESTful desde la misma máquina necesitamos permitir CORS en el puerto 3000.

Para simplificar las cosas, la lógica de sincronización permitirá que todos los documentos se transmitan sin reglas de lectura o escritura.

Creación de la aplicación web

Todavía no estamos ejecutando Sync Gateway, pero tanto Couchbase Server como Sync Gateway están listos para su uso. Ahora podemos centrarnos en crear nuestro proyecto Node.js.

El proyecto en sí va a ser un ejemplo muy simple. Vamos a crear una API RESTful con dos endpoints, uno para crear datos y otro para listar datos. El truco aquí es que un endpoint consultará Couchbase Server con el SDK de Node.js directamente y otro endpoint escribirá datos a Couchbase Sync Gateway a través de la API RESTful de Sync Gateway.

Antes de adelantarnos, empecemos a crear el proyecto.

Creación de un nuevo proyecto y arranque del código

Como estamos usando Node.js, todo se realizará desde el Símbolo del sistema (Windows) o Terminal (Mac y Linux). Usando uno de ellos, ejecuta lo siguiente:

El comando anterior creará un nuevo paquete.json para nuestro proyecto. Todas las dependencias de nuestro proyecto se almacenarán en este archivo.

A continuación ejecute lo siguiente para obtener todas las dependencias que necesitamos:

Vamos a utilizar couchbase para comunicarse con nuestra base de datos, express para Express Framework, body-parser para aceptar datos del cuerpo en las solicitudes, y solicitar para hacer peticiones HTTP desde dentro de Node.js, no a Node.js.

En este punto podemos empezar a arrancar la aplicación.

Cree un archivo llamado index.js dentro del proyecto. Vamos a utilizarlo para toda nuestra aplicación. En aplicaciones más grandes o de producción podría considerar dividirlo en archivos más precisos para su mantenimiento, pero para este ejemplo está bien.

Abrir index.js e incluyen las siguientes importaciones:

Las dependencias que habíamos descargado anteriormente se han importado al proyecto. Sin embargo, no se han inicializado.

Las líneas anteriores inicializan Express Framework, preparan N1QL dentro de la aplicación, y habilitan la aceptación de datos codificados en JSON y URL dentro de los cuerpos de las peticiones.

Aunque N1QL está prácticamente listo para funcionar, no nos hemos conectado al cluster de servidores ni hemos abierto nuestro bucket. Esto se puede lograr de la siguiente manera:

Una vez más, estamos utilizando un cubo que he llamado ejemplo en un paso anterior.

Finalmente, como última parte del bootstrapping de nuestro proyecto, podemos empezar a servir la aplicación:

Cuando se ejecute, la aplicación web será accesible desde http://localhost:3000 en un navegador web y en otros lugares.

Añadiendo el SDK Node.js de Couchbase y la lógica RESTful Sync Gateway

Como se mencionó anteriormente, esta aplicación va a seguir siendo simple para que sea fácil de entender. Sólo vamos a tener dos endpoints, uno que utiliza el SDK de Couchbase Server, y otro que utiliza la API RESTful de Sync Gateway.

Estos dos puntos finales tendrán el siguiente aspecto:

Empezando por el /lista endpoint tenemos el siguiente código:

Cuando se realiza una petición GET a este endpoint se ejecutará una consulta N1QL contra Couchbase Server. Esta consulta obtendrá el tipo, nombrey apellido de cada documento del bucket en cuestión, siempre y cuando dichos documentos tengan una propiedad tipo que es igual a persona. Si hay un error, devuelve un error al usuario, de lo contrario devuelve los datos que se recuperaron.

El siguiente endpoint hace uso de peticiones HTTP dentro de Node.js. Antes de saltar directamente al endpoint, puede tener sentido crear un método de ayuda para hacer estas peticiones:

El método anterior hará una petición POST contra una URL particular, pasando un objeto JavaScript como cuerpo. Si tiene éxito, la respuesta será devuelta, de lo contrario un error.

En makePostRequest puede verse en acción en lo que sigue:

En el código anterior, cuando se realiza una solicitud POST contra el archivo /crear primero comprobamos que ciertas propiedades existen en el cuerpo, de lo contrario lanzamos un error. Si existen, hacemos uso de la propiedad makePostRequest pasando la dirección URL del Documentación de la API RESTful de Sync Gateway.

En este punto, si tiene éxito, los datos se guardarán de Sync Gateway a Couchbase Server y se pasarán a todos los dispositivos conectados.

El código fuente completo de la aplicación

Si desea ver la aplicación completa, a continuación encontrará el código fuente:

Vamos a explorar la ejecución de esta aplicación en el siguiente paso.

Ejecutar la aplicación

Hay muchas piezas en movimiento en este ejemplo en particular. Tenemos una aplicación Node.js, Couchbase Server y Couchbase Sync Gateway. Más adelante es probable que también tengas una aplicación móvil.

Lo primero que queremos hacer es lanzar Sync Gateway y hacer que se conecte a nuestro clúster Couchbase Server ya en ejecución. Ejecute lo siguiente desde su línea de comandos:

Con Sync Gateway en marcha puede ejecutar la aplicación Node.js ejecutando:

La aplicación debería ser ahora accesible en http://localhost:3000 en las rutas de los extremos concretos.

Conclusión

Acabas de ver una posible forma de unir tus aplicaciones Couchbase Mobile y Couchbase Server. Aunque en realidad no creamos una aplicación móvil en esta guía, usamos todos los componentes que la harían posible como paso final. Creamos una aplicación Node.js que usaba tanto el SDK Node.js de Couchbase Server como Couchbase Sync Gateway.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

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.

3 Comentarios

  1. Hola, señor,

    Nos gustaría utilizar su enfoque, pero hay una consideración que nos encontramos. Se trata de casos offline para dispositivos móviles. Dado que no podía hacer una llamada, entonces, ¿cómo podemos superar este problema? ¿Deberíamos escribir cambios en couchbase lite y luego, cuando Internet esté disponible, hacer una llamada api a nuestro servidor?

    En segundo lugar, ha mencionado que existen otros enfoques posibles para utilizar couchbase mobile y couchbase server. ¿Podría darnos información al respecto?

    Gracias.

    1. No tendrás que preocuparte por los casos extremos con Couchbase mobile porque por defecto Couchbase Lite se comunicará con Sync Gateway siempre que haya una conexión a Internet disponible.

      Con Node y Couchbase Lite comunicándose con Sync Gateway, todo irá bien.

      Cuando se publique Couchbase 5.0, no tendrás que comunicarte de esta manera, ya que todo estará integrado en los SDK.

      1. Así, en nuestro caso, si Internet está activo, se realiza una llamada al servidor de aplicaciones que recibe la solicitud y se comunica con la pasarela de sincronización. Por otro lado, si no hay internet, la aplicación móvil inserta los datos en su propio couchbase lite local. Cuando la conexión a Internet está disponible, las operaciones de sincronización se manejan y mantenemos los datos.

        Gracias.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.