En agosto participé en Medio Oeste JS ubicado en Minneapolis, Minnesota. Como ya sabrás, soy un gran fan del desarrollo de aplicaciones completas con JavaScript. Esto es exactamente lo que había presentado en la conferencia.

Mi sesión fue muy concurrida y muchos desarrolladores aprendieron a utilizar Node.js con Couchbase para desarrollar una API RESTful, y Angular como capa de cara al cliente.

Couchbase at Midwest JS

Como prometí, voy a revisar el material que repasé durante la presentación para que los conceptos y el código puedan reproducirse y ampliarse.

De cara al futuro, se supone que tienes Servidor Couchbase, Node.jsy el Marco iónico CLI instalado y configurado. Couchbase será la base de datos NoSQL, Node.js impulsará nuestro backend, y Ionic Framework nos dará un frontend web impulsado por Angular.

El proyecto creado en Midwest JS permitía almacenar información sobre videoconsolas y videojuegos para varias consolas. Esto demostró el uso de CRUD así como las relaciones entre documentos NoSQL y cómo Couchbase lo hace fácil.

Creación de Node.js con Couchbase NoSQL Backend

Antes de comenzar el desarrollo, necesitamos crear un nuevo proyecto Node.js. Desde la línea de comandos, ejecuta lo siguiente:

El comando anterior creará un proyecto paquete.json e instalar las dependencias de nuestro proyecto. El cors nos permitirá usar Node y Angular localmente en dos puertos diferentes sin obtener errores de compartición de recursos entre orígenes. El uuid nos permitirá generar cadenas únicas para utilizarlas como claves de documento. La dirección body-parser nos permitirá enviar datos JSON en peticiones HTTP. Usaremos Express y Couchbase que explican los otros dos paquetes.

Crear un app.js dentro de tu proyecto. Contendrá todo el código fuente de nuestra aplicación Node.js. Como ejemplo, debería tener el siguiente aspecto:

Observa que hemos importado cada una de las dependencias descargadas, inicializado y configurado Express, y conectado a un Bucket en nuestro cluster Couchbase.

Tendremos cinco puntos finales de API RESTful diferentes para esta aplicación.

Lo primero lógico sería crear una videoconsola para poder añadirle juegos. Echa un vistazo al siguiente código endpoint:

En la lógica anterior, estamos validando que a título existe en nuestra solicitud. Si es así, generaremos un nuevo id, asignaremos un tipo a los datos de nuestra petición, e insertarlos en Couchbase. La respuesta de éxito o fracaso de la inserción será devuelta al cliente, que finalmente será una aplicación Angular.

Para buscar consolas de videojuegos, tendremos que hacer una consulta basada en la variable tipo propiedad. Por esta razón, tendremos que utilizar una consulta N1QL en lugar de una búsqueda por id.

La consulta N1QL no es más que un simple SELECCIONE que encontraríamos en SQL. Después de ejecutar la consulta, devolveríamos la respuesta al cliente.

Esto nos lleva a los videojuegos propiamente dichos. Las cosas se ponen un poco más complejas, pero no más difíciles.

En la lógica del endpoint anterior, planeamos insertar un nuevo videojuego en la base de datos. Esto no es diferente de lo que vimos al insertar una nueva consola de videojuegos en la base de datos. Estamos definiendo un tipo pero también nos aseguramos de que cid existe. En cid será un id de consola que nos permitirá establecer una relación con nuestros datos.

Cuando tienes relaciones, tienes ÚNASE A operaciones.

En el endpoint anterior, estamos haciendo otra consulta N1QL, pero esta vez tenemos una consulta ÚNASE A operación. No es útil devolver un cid cuando se buscan videojuegos, así que ÚNASE A y sustituye esa información por el título de la consola del otro documento.

Lo mismo ocurre cuando buscamos un videojuego concreto:

La alternativa al uso de N1QL y ÚNASE A sería hacer dos búsquedas basadas en el id. No hay nada malo en esta práctica, pero en mi opinión es más fácil dejar que la base de datos se encargue de un ÚNASE A en lugar de intentar ÚNASE A a través de la capa de aplicación.

Esto nos lleva al frontend del cliente.

Creación de Ionic Framework con Angular Frontend

Como se mencionó anteriormente, esta vez estamos utilizando Ionic Framework que utiliza un sabor de Angular. Elegí esto porque me sentía demasiado perezoso para crear un frontend atractivo con Bootstrap o Foundation.

Con la CLI de Ionic Framework disponible, ejecute lo siguiente:

El comando anterior creará un proyecto llamado pwa utilizando Ionic Framework sidemenu plantilla.

La plantilla base es útil, pero no tiene todo lo que necesitamos. Tenemos que añadir algunas páginas a la aplicación.

Utilizando los generadores de Ionic Framework, o manualmente, cree un archivo consolas, juegosy juego página. Cada una de estas páginas debe tener un archivo HTML, SCSS y TypeScript y cada directorio de página debe estar en el directorio páginas directorio.

Abra el archivo app/app.component.ts y que tenga el siguiente aspecto:

Observe que hemos importado JuegosPágina y ConsolasPáginaactualizó el páginas y establecer la página raíz por defecto como JuegosPágina. De este modo habremos configurado la navegación y la página predeterminada cuando se inicie la aplicación.

Para completar la configuración, también tenemos que modificar el proyecto de app/app.module.ts archivo. Que tenga el siguiente aspecto:

Observe que hemos importado cada una de nuestras nuevas páginas y las hemos añadido a la carpeta declaraciones y entryComponents matrices del @NgModule bloque.

Ahora podemos centrarnos en el desarrollo de la aplicación y en conectarla a nuestra API.

Abra el archivo src/pages/games/games.ts y hacer que se vea como lo siguiente. Vamos a desglosar lo que sucede a continuación.

Dentro del JuegosPágina tenemos una variable pública llamada juegos. Como es público, será accesible a través del HTML. Contendrá todos los juegos devueltos desde la aplicación Node.js.

Cuando se carga la página, queremos consultar nuestro endpoint. Nunca es una buena idea hacer esto en el archivo constructor por lo que en su lugar utilizaremos el método ionViewDidEnter método. Después de emitir la solicitud, el resultado se transforma en JSON y luego se carga en nuestra variable pública.

Si queremos crear un nuevo juego en nuestra base de datos, las cosas son un poco diferentes. Vamos a mostrar un cuadro de diálogo modal y recoger la entrada.

En crear mostrará nuestro método Página de juego que estará en formato modal. Cualquier dato introducido en el formulario en el modal será devuelto al JuegosPágina y se envía mediante una solicitud HTTP a la API.

Antes de echar un vistazo a Página de juegoveamos el HTML que potencia JuegosPágina.

En el HTML anterior, hacemos un bucle a través de nuestro código público juegos array. Cada objeto de la matriz se muestra en la pantalla dentro de una lista. Angular hace todo el trabajo pesado por nosotros.

Abra el archivo src/pages/game/game.ts e incluya lo siguiente:

Esta lógica modal es similar a lo que ya hemos visto. Habrá un formulario vinculado a HTML y TypeScript. Cuando el ionViewDidEnter se consulta la información de la consola. Esta información de la consola se utilizará finalmente para una lista de radio que el usuario puede seleccionar.

Cuando el usuario selecciona el guardar los datos vinculados en el formulario público se pasan al método anterior JuegosPágina página.

El HTML que alimenta este modal, que se encuentra en src/pages/game/game.html se ve así:

Tenemos una lista simple que compone nuestro formulario. Los elementos del formulario están ligados a nuestra variable TypeScript y la información de la consola se repite para rellenar un HTML seleccione elemento.

Esto nos lleva a la página final del frontend Angular.

Abra el archivo src/pages/consolas/consolas.ts e incluya lo siguiente:

Aunque no es muy diferente de lo que ya hemos visto, tenemos una nueva característica. Estamos utilizando un cuadro de diálogo emergente para recoger información sobre nuevas consolas de videojuegos.

Cuando se cierra la ventana emergente, se ejecuta lo siguiente:

Esto tomará la información encontrada en el formulario y la enviará vía HTTP a nuestra API que a su vez guardará la información de la consola en la base de datos.

Impresionante, ¿verdad?

El HTML que se encuentra en el proyecto src/pages/consolas/consolas.html tiene el siguiente aspecto:

De nuevo, es casi idéntico a los otros archivos HTML que hemos visto.

Conclusión

Acabas de recibir un resumen de todo lo que repasé en Midwest JS 2017. Vimos cómo crear una API Node.js que se comunica con Couchbase, nuestra base de datos NoSQL, así como crear un frontend usando Angular y Ionic Framework. Estos son sólo algunos componentes de una aplicación de pila completa.

Para más información usando Node.js con Couchbase, consulte la Portal para desarrolladores de Couchbase. Si quieres que vuelva a Midwest JS, házmelo saber en los comentarios.

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