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.
Run documentation npx compodoc -p tsconfig.json -s
Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.
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.
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
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.
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
Crear un create.user.dto.ts
Class validator nos permite hacer validaciones mediante clases.
user.service.ts
El user.service.ts usa un decorador @Injectable(), con esto nos permite llamar a la clase mediante inyección de dependencias.
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.
Nuestro modulo user debemos indicar el servicio, si no la inyección de dependencias no funcionara.
Y por último nuestro main.js debe tener activado las validaciones.
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.