Estándar y buenas prácticas con NestJS Framework

por - octubre 15, 2020

Estándar y buenas prácticas con NestJS Framework

Estándar y buenas prácticas con NestJS Framework

Introducción

Cuando trabajamos en nuestras aplicaciones implementando NestJS, es necesario seguir unas pautas que el mismo Framework propone e igualmente para Typescript seguir unas buenas prácticas de desarrollo. En el presente tutorial vamos a transformar el proyecto NestJS que he venido desarrollando con cada publicación, aplicando prácticas correctas en el desarrollo del proyecto. Igualmente si no han visto las publicaciones anteriores, aquí pueden descargar el código con todas las implementaciones previas e igualmente revisar este enlace para la configuración con MongoDB. Para poder probar las API expuestas en el proyecto, pueden descargar está colección de Postman (aquí), que ya tiene ejemplos de como hacer las peticiones.

Que necesitamos...

  • El proyecto NestJS antes mencionado.
  • Base de datos MongoDB activa.
  • Tener instalado NodeJS en su última versión estable.
  • Tener instalado NestJS, igual revisar este enlace para su instalación.
  • Tener instalado Yarn (No obligatorio).
  • Tener instalado Postman e importar la colección proporcionada más arriba.

Manos a la obra

El proyecto se trata de almacenar los cursos que estoy ejecutando, próximo a ejecutar o ya finalizados. Básicamente es un CRUD de cursos. Entonces como nuestra entidad es sobre cursos debemos crear un módulo asociado a este. Eso lo hacemos con el siguiente comando:

    nest generate module courses

Con este comando nos crea una carpeta con la siguiente ruta src/courses con un archivo courses.module.ts que es la definición del módulo y en app.module.ts nos hará la importación de este nuevo modulo CoursesModule. Lo siguiente es crear un servicio, que básicamente tendrá toda nuestra lógica de negocio y que tendrá la comunicación con nuestra base de datos. Eso igualmente lo crearemos en el terminal con lo siguiente:

    nest g service courses

Fíjense que esta vez no coloque generate completo sino simplemente g, funciona exactamente igual, pero es un alias a la opción completa. Aquí nos genera dos archivos, uno donde escribiremos la lógica de negocio y otro para el testing. Entonces la primera transformación es pasar nuestra lógica de src/app.service.ts, vamos a copiar todo lo que está dentro de la clase AppService (no olvidar eliminar el contenido más adelante). Debe quedar como la siguiente imagen.

Copiar AppService

CoursesService Actualizado

Encontraremos que falta varias importaciones, por ejemplo las interfaces. Por lo general dedicamos un archivo de interfaces por módulo, cuando son exclusivos para el mismo. En este caso crearemos una interfaces con el terminal:

    nest g interface courses/courses

Aquí pegaremos las interfaces que están por encima de la clase AppService. Como vemos a continuación.

Copiar interfaces de AppService

Courses Interfaces Creado

Ahora lo siguiente es crear nuestro controlador, que es donde está todo lo que es el tratamiento de las peticiones HTTP, es decir las rutas, métodos, respuestas, validaciones y otras configuraciones para nuestra API Rest. Para crear ejecutamos el siguiente comando:

    nest g co courses

Como vemos en la siguiente instrucción, en vez de escribir controller pudimos solo escribir co, que hace la misma función, igualmente en las conclusiones indico el enlace para conocer un poco más sobre NestJS CLI. Aquí copiaremos el contenido de AppController del archivo src/app.controller.ts. Debe quedar de la siguiente manera.

Copiar contenido AppController

Course Controller Actualizado

Ya solo nos queda mover la carpeta src/course dentro de src/courses. Pueden ignorar que el editor les mencione corregir las importaciones, porque igualmente hay que crearlos o modificarlos en la nueva estructura. Debemos borrar todos los contenidos copiados, porque ahora con el editor y la ejecución de NestJS iremos corrigiendo las importaciones. Para los que usemos Visual Studio Code, podemos valernos de la extensión TypeScript Importer, este con colocar en código con error, podemos presionar la combinación CTRL+Space (CTRL + Barra espaciadora), nos indicará las opciones para importar automáticamente. 

Ajustado AppController y AppService

Deben quedar así de limpios los archivos src/app.controller.ts src/app.service.ts. Si nos está faltando son los archivo modules, pero eso lo hacemos al final. Ejecutemos en el terminal lo siguiente y por su cuenta pueden empezar a corregir y a importar los elementos que hacen falta, yo por aquí les mostraré los resultados para cada archivo, para que antes de que empiecen a corregir tengan una guía de los resultados.

    yarn start:dev

Vista de errores desde el terminal

Importaciones para schema y modelo de datos

Ajustes de CoursesService y CoursesController

Cabe destacar que en courses.controller.ts ya no usaremos appService sino que estaremos usando el propio del módulo, que es en este caso courseService.

Ya por último en src/app.module.ts, vamos a copiar la línea roja y eliminar la línea verde que vemos en la siguiente imagen:

Ajustes de AppModule

Y esta línea roja que copiamos vamos a ir al archivo src/courses/courses.module.ts y la pegamos dentro de los imports del módulo y hacemos las importaciones pertinentes, como vemos a continuación.

CoursesModule actualizado

Con este último cambio ya debe estar funcionando nuestra aplicación. Cabe recalcar en este último cambio, es notar como se ve un modulo y que componentes contiene. Por un lado definimos que controladores y servicios gestionará nuestro módulo y que nos permitirá realizar las inyecciones de dependencia de nuestro servicios en el constructor de nuestros controladores. Igualmente están los imports, que allí puede estar los providers o módulos externos que queramos inyectar en nuestro controlador o servicios del módulo, por ejemplo cuando inyectamos de MongooseModule el schema de nuestra base de datos en nuestro servicio.

Para realizar las pruebas, de nuestras API, ahora debemos anteponer la palabra courses, debido que nuestro módulo empieza desde el módulo de Cursos. Aquí el ejemplo del GET en Postman.

Ajuste de URL en Postman

Conclusión

Bien ya hemos llegado al final del tutorial, queda como tarea validar las API desde Postman, todo funcione correctamente. Como prometí, aquí les regalo el enlace de como usar NestJS CLI, para que puedan echar una ojeada de como funciona. Vean que ahora el proyecto luce un más organizado y bastante estructurado, este es el poder de aplicar el estándar y buenas prácticas de NestJS y TypescriptSin más que decir, espero que les haya gustado la siguiente publicación, si tienen alguna duda, no duden en comentarlo. Hasta pronto.

También te puede interesar

0 comentarios

ToTop