En el ámbito del desarrollo web, es fundamental desarrollar aplicaciones que sean robustas y escalables. NestJS, es un framework moderno basado en Node.js, proporciona una solución eficaz para la creación de aplicaciones del lado del servidor. Al integrarlo con MongoDB, una base de datos NoSQL de gran potencia, se pueden lograr sistemas de backend que no solo son eficientes sino también flexibles. En este post, veremos cómo se construye una aplicación utilizando NestJS y MongoDB, desde la configuración inicial del proyecto hasta la implementación de operaciones CRUD.
Este artículo explora el desarrollo de una aplicación NestJS con MongoDB, centrado en gestionar una colección de usuarios a través de operaciones CRUD. Iniciamos con la configuración del proyecto NestJS, incluyendo la instalación de dependencias y la conexión a MongoDB. A continuación, detallamos la creación de modelos MongoDB usando Mongoose y la construcción de APIs RESTful para procesar solicitudes de usuarios. Se aborda la creación de servicios y DTOs para la lógica de negocio y transferencia de datos, seguido de instrucciones para iniciar la aplicación y testear los endpoints API. Este enfoque ofrece una base robusta para crear aplicaciones backend escalables y eficientes.
Comenzamos creando un nuevo proyecto NestJS y configurando las dependencias necesarias.
Aquí nos preguntará que tipo de gestor de paquetes deseamos utilizar, en mi caso seleccionare npm.
Creación de API
A continuación crearemos un controlador para gestionar las rutas relacionadas con los usuarios, incluyendo operaciones para encontrar, crear, actualizar y eliminar usuarios. Esto lo haremos dentro de src/modules/users.
Podemos ejecutar el siguiente comando para que nestjs nos ayude a crear los componentes necesarios desde el módulo hasta el archivo de servicios.
Eso nos preguntará que tipo de transporte utilizaremos. Seleccionamos REST API y posteriormente en la opción de si nos gustaria generar los puntos de entrada para nuestro CRUD, le ponemos Y.
Procedemos a definir un modelo de usuario con Mongoose. Establecemos esquemas y propiedades esenciales como nombre, usuario, correo y edad.
Para eso crearemos un nuevo archivo: src/modules/users/schemas/user.schema.ts
Archivo users.module.ts
Archivo users.controller.ts
En el archivo app.module.ts, configuramos la conexión a la base de datos MongoDB, especificando el modelo y la URL de conexión.
Para optimizar la comunicación entre el cliente y el servidor, definimos objetos DTO. Estos objetos estructuran la transferencia de datos, asegurando que solo los datos necesarios sean parte de las solicitudes y respuestas, lo cual mejora la seguridad de la aplicación.
Al ejecutar el comando nest g resource modules/users en NestJS, se generan automáticamente varios archivos que facilitan la estructuración del módulo de usuarios, incluidos los DTOs específicos para las operaciones de creación y actualización de usuarios. Estos archivos, create-user.dto.ts y update-user.dto.ts, se diseñan para contener las propiedades que los usuarios pueden establecer o modificar a través de las interacciones de la API.
Por ejemplo, el archivo create-user.dto.ts puede definirse como sigue, reflejando las propiedades requeridas y opcionales basadas en el esquema User:
De igual forma, el archivo update-user.dto.ts permitiría la actualización de ciertos campos, potencialmente todos siendo opcionales, ya que en una operación de actualización no todos los campos necesitan ser pasados a través de la API:
Estos DTOs aseguran que cada operación de creación o actualización maneje sólo los datos relevantes, lo que a su vez ayuda a mantener la integridad de los datos y reduce la posibilidad de errores o de exposición de datos innecesarios. Al definir estos DTOs basándonos en el esquema de User, aseguramos que las interacciones con nuestra base de datos sigan las reglas y estructuras definidas, facilitando el mantenimiento y la escalabilidad del código.
Durante la generación del recurso de usuarios, además de los DTOs y controladores, se creó una carpeta denominada entities. Aunque típicamente utilizada con TypeORM para definir entidades que representan tablas en bases de datos SQL, en este proyecto utilizamos una estructura similar para organizar nuestros esquemas con Mongoose, por lo tanto nuestra carpeta schemas hace la función de entities y por esa misma razón podemos eliminar la carpeta entities.
Ejecutando el siguiente comando podemos correr la aplicación
Ahora probaremos los servicios utilizando Postman para enviar peticiones HTTP a los endpoints de la API, gestionando usuarios en http://localhost:3000/users. Esto nos permitirá realizar operaciones CRUD directamente sobre la base de datos MongoDB.
Utilizando NestJS junto con MongoDB, puedes desarrollar aplicaciones de backend escalables y eficaces.
El link del código completo lo pueden encontrar dando clic aquí.
Unete a nuestra comunidad
¡Recibe contenido exclusivo directamente en tu correo!