De Spring Boot a NodeJS

Juan Camilo Peña Vahos
Analista de Desarrollo en Cidenet S.A.S.

El título de este artículo puede parecer confuso, dado que Spring Boot es un framework para desarrollo de aplicaciones backend en Java, mientras que NodeJS es un Runtime environment (RTE). En el ambiente de Java, el equivalente a Node es el JRE.

Entonces ¿por qué el título?. Porque la comunidad de Node ha desarrollado un conjunto de librerías, enriquecidas día a día, para desarrollar aplicaciones backend robustas, y entre todas, forman un paralelo a Spring Boot que no está centralizado en una sola compañía o grupo de desarrolladores. Muchas de ellas son incluso de carácter opensource, y esto significa que podemos colaborar para mejorarlas.

La mayoría de los proyectos en Cidenet se han realizado con Spring Boot, y es claro que este framework tan robusto parece tener dependencias para cualquier necesidad que tenga la aplicación; llámese logger, gestor de variables de entorno o gestor de errores, entre otros.

Con este breve artículo quiero mostrarles algunas de las dependencias que se han hecho populares para poder solventar estas mismas necesidades en una aplicación backend desarrollada con NodeJS. Dejaré a un lado express porque el objetivo no es mostrar cómo hacer una aplicación backend con este framework, sino qué dependencias agregarle.

Dependencias

Nota: Dejaré los links en npm, pero si usas yarn o algún otro gestor de paquetes, seguro los vas a encontrar también.

Bcrypt

Bcrypt es bastante popular, fácil de usar por el desarrollador, pero bastante complicada en su profundidad. Utilizando incluso recursos de Python, esta dependencia se encargará de encriptar datos en una sola dirección. Es muy popular para encriptar claves de usuarios y otros datos sensibles. De hecho, Spring Security utiliza este mismo algoritmo internamente.

Ver más sobre Bcrypt

Nodemailer

¿Necesitas enviar un correo? Nodemailer es el gestor del servicio de correos más popular en NodeJS.

Es común que una aplicación backend deba enviar correos para notificar eventos. Nodemailer es la librería más usada para esta labor en NodeJS. Entre sus funciones destacan poder configuar un formato HTML para el cuerpo del correo, usar protocolos diferentes al SMTP ( Lo que se conoce como “transport methods” ); incluso se pueden enviar imagenes codificadas a través de algunos plugins.

Ver más sobre Nodemailer

Winston

En Spring usamos log4js como librería para generar logs.

Los logs son registros de eventos que podemos consultar después. Lo más común es usarlos para registrar las trazas de errores capturadas por la aplicación. Winston es el Logger más usado en NodeJS. Sus funcionalidades son extensas, permitiendo manipular archivos en diferentes formatos, controlar múltiples archivos y definir diferentes niveles de loggeo ( info, error, alert, etc ). Winston también tiene funciones para facilitar la labor de analizadores automáticos de logs.

Ver más sobre Winston

DotEnv

En Spring Boot tenemos el archivo de propiedades (properties) donde guardamos variables que se usan a lo largo de toda la aplicación o variables de entorno. Las variables de entorno son muy importantes porque definen el ambiente en que se está trabajando. Las variables van a tener valores diferentes dependiendo de la etapa en la que se encuentre el proyecto, sea producción, desarrollo, QA, o cualquier otra que la empresa implemente.

DotEnv es una dependencia que permite manipular y cargar, en la aplicación, variables de entorno almacenadas en un archivo de extensión .env. No solo eso, también ofrece funciones para poder seleccionar entre múltiples archivos de ambiente, lo cual nos permitirá definir una lógica para cambiar entre ellos, dependiendo del estado del proyecto.

Ver más sobre DotEnv

UnderscoreJS

¿Has escuchado hablar de la programación funcional? JavaScript, desde el ECMAScript 6, ha introducido conceptos y funciones que aplican la metodología de este paradigma de programación.

Underscore es una librería de JS que extiende este conjunto de funciones.

Es muy útil para el manejo de objetos y arreglos y ahorrarás mucho tiempo en operaciones como filtrado y mapeado de los mismos.

Ver más sobre Underscore

Supertest

Las pruebas E2E requieren hacer peticiones a la API que estás diseñando. Supertest es una librería que permite hacer fake respuesta de modo que podamos probar el comportamiento de los endpoints que hemos creado.

Ver más sobre Supertest

Existen más funciones importantes en cualquier API en temas de seguridad, autenticación, autorización y manejo de errores, entre otras. Podemos mencionar aquí a JWT o Passport (que es la más usada en materia de autenticación).

El objetivo de este artículo es informar sobre la existencia de estas herramientas. Cuando se empieza a trabajar con Node, viniendo de un contexto como el de Spring, se puede pensar que uno mismo debe pelear con resolver estos problemas cuando la realidad es que la gran mayoría ya están listos para ser usados rápidamente.

La invitación es hacer una pequeña consulta antes de cada desarrollo, es posible que existan herramientas que lo hagan o que ayuden a facilitarlo.