DEV Community

Cover image for Mi primera aplicacion con Nest.js
Ronny Medina
Ronny Medina

Posted on • Updated on

Mi primera aplicacion con Nest.js

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

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.



NPM Version
Package License
NPM Downloads
Travis
Linux
Coverage
Gitter
Backers on Open Collective
Sponsors on Open Collective


Description

Nest framework TypeScript starter repository.

Installation

$ npm install
Enter fullscreen mode Exit fullscreen mode

Running the app

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod
Enter fullscreen mode Exit fullscreen mode

Test

# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov
Enter fullscreen mode Exit fullscreen mode

Example

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.

Stay in touch

License

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 
Enter fullscreen mode Exit fullscreen mode

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.

Discussion (6)

Collapse
abelardolg profile image
AbelardoLG

Si tienes una app cliente que consuma los servicios de esta app nestjs en tu máquina local (ambas apps en tu máquina local), no te olvides de escribir lo siguiente en el fichero main.ts:

async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors(); // Habilita las conexiones entrantes locales.
await app.listen(3000);
}
bootstrap();

Collapse
abelardolg profile image
AbelardoLG

Muy buena guía.

¿Cómo podríamos separar las rutas de los controladores para ponerlas en un fichero aparte? ¿Se puede?

Collapse
ronnymedina profile image
Ronny Medina Author • Edited on

por lo que e visto no se puede, te dejo un link de un curso de nest que hice por si es de tu interés y puedes dejarme tus sugerencias youtube.com/playlist?list=PLutnWmY....

Collapse
enmanuel97 profile image
Jesus Enmanuel De La Cruz • Edited on

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.

Collapse
dajpes profile image
dajpes

Que ventajas o desventajas tiene este framework comparado a Laravel?

Collapse
ronnymedina profile image
Ronny Medina Author

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