loading...
Cover image for Mi primera aplicacion con Nest.js

Mi primera aplicacion con Nest.js

ronnymedina profile image Ronny Medina ・3 min read

Si estas interesado un probar nuevas tecnologías quizás este post sea de tu interés. Hoy vengo a hablarte de Nestjs. Es un framework de nodejs que se basa en angular.

Esto quiere decir que viene con typescript, puedes implementar módulos como en angular, usar pipes, interceptor y mucho más...

Si te ha tocado configurar una aplicación en nodejs que tenga typescript, sabes que hay que hacer varias configuraciones. Como por ejemplo usar ts-node y un par de cosas más. O instalar paquetes adicionales como por ejemplo routing-controllers, si lo conoces.

La buena noticia es que nestjs, ya hace todo eso por ti. Viene con typescript, usa routing-controller y por defecto usa express, entonces que no tienes que preocuparte por configurar nada de eso.

Ejemplo con Nest.js

Puedes ver el ejemplo completo aca https://github.com/ronnymedina/nest-example con swagger.

Instalar el clic y crear un nuevo proyecto

npm i -g @nestjs/cli // instalar el clic

nest new example // crear el proyecto

cd example // navegar hacia el proyecto

npm run start:dev // run server 

Con esto su servidor debe estar funcionando en http://localhost:3000/, y debe tener algo como esto en su directorio.

Alt Text

Para este ejemplo vamos a simular un endpoint de usuario, vamos a implementar la siguiente estructura de carpetas src/apis/users, ahí colocaremos todo lo correspondiente a users.

Crear un archivo con el siguiente nombre users.controller.ts

Alt Text

Para mantener las cosas ordenadas, vamos a crear nuestro primer modulo. Como en angular podemos hacer módulos en nest también, con esto podemos mantener todas las dependencias necesarias que necesite nuestro modulo.

Crear un index.ts

Alt Text

Importar nuestro modulo de users en app.module

Alt Text

Con eso debes poder navegar a la siguiente ruta http://localhost:3000/users/test. Ahora vamos simular nuestro service.

En nestjs a pesar que tiene varios paquetes que nos proveen soluciones, no vienen instalados por defecto, entonces nosotros debemos hacer la instalación manual, debemos instalar 2 paquetes necesarios para gestionar las validaciones.

  • npm i class-validator --save
  • npm i class-transformer --save

Crear un user.entity.ts

Alt Text

Crear un create.user.dto.ts

Class validator nos permite hacer validaciones mediante clases.

Alt Text

user.service.ts

El user.service.ts usa un decorador @Injectable(), con esto nos permite llamar a la clase mediante inyección de dependencias.

Alt Text

Resultado de nuestro users.controller.ts

Si se fijan estamos llamando a nuestro user.service en el constructor mediante la inyección de dependencias y nuestro método create recibe un parámetro que es la data enviada, y como es de tipo CreateUserDto automáticamente esto se ejecuta como un middleware que valida nuestra información antes que llegue a ejecutar nuestro método create.

Alt Text

Nuestro modulo user debemos indicar el servicio, si no la inyección de dependencias no funcionara.

Alt Text

Y por último nuestro main.js debe tener activado las validaciones.

Alt Text

Espero que te haya gustado, puedes ver el ejemplo completo en mi github con swagger y compodoc.

Una ultima mención es que si quieres integrar sequelize y tienes problemas debes usar la versión 5 ya que sequelize 6 no soporta typescript o si al correr los test con jest se produce un error bajar la versión de jest a la 24.

Si quieres ver otra implementación con base datos, solo házmelo saber mediante los comentarios

Posted on by:

ronnymedina profile

Ronny Medina

@ronnymedina

I like to learn new things every day and play games...

Discussion

pic
Editor guide
 

Nestjs es lo mejor, descubri este framework buscando una alternativa a node con express y es de lo mejor, es facil de configurar y de usar y las grandes cosas que se pueden hacer con el.

 

Que ventajas o desventajas tiene este framework comparado a Laravel?

 

Laravel es un framework mucho mas maduro que nest, la ventaja o desventaja que puedes sacar va a depender de lo que quieras hacer