Photo by Unsplash

¿Por qué NestJS es uno de los mejores frameworks para Node?

La comunidad Javascript es una de las más grandes de desarrollo en todo el mundo, no es de extrañarse entonces que sigue siendo uno de los lenguajes más usados cada año.
Ya sea que estés desarrollando para Backend, tienes muchas opciones desde donde escoger. Si quieres hacer backend, la opción más popular por la cual van muchos desarrolladores es ExpressJS. Instalas un par de librerías en tu package.json y ya puedes comenzar la creación de tu API o vistas que retornen HTML desde el servidor.
Entonces al leer el título te preguntarás: ¿Por qué prefiero NestJS, si hay otras muchas más opciones populares como Express o Hapi?
Acá te daré algunas razones por las cuales he trabajado en algunos proyectos en NestJS y volvería a usarlo.

Es NodeJS (Javascript)

Todos sabemos las ventajas que ofrece NodeJS como framework para Backend, velocidad de ejecución y la curva de aprendizaje para las personas que vienen desde el Frontend.
1
# Instalando NestJS globalmente
2
npm i -g @nestjs/cli
3
# Creando un proyecto nuevo
4
nest new project-name

Recomienda, pero no obliga, un orden establecido para trabajar

Y me recuerda mucho a Laravel (PHP).
Me explico, la organización de carpetas se parece mucho a Angular, no te obliga a ordenar tu código como podrias ver en los tutoriales. Pero he descubierto que cierta manera de organizar los archivos es una combinación de cualquier framework MVC + Angular. Para cualquier persona que trabajo en otro framework Backend que no sea ExpressJS, se sentirá más cómodo haciendo la transición a Nest.
1
// Un controlador REST común en NestJS
2
@Controller('users')
3
export class UsersController {
4
constructor(private readonly usersService: UsersService) {}
5
6
@Post()
7
create(@Body() createUserDto: CreateUserDto) {
8
return this.usersService.create(createUserDto);
9
}
10
11
@Get()
12
findAll() {
13
return this.usersService.findAll();
14
}
15
16
@Get(':id')
17
findOne(@Param('id') id: string) {
18
return this.usersService.findOne(+id);
19
}
20
21
@Patch(':id')
22
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
23
return this.usersService.update(+id, updateUserDto);
24
}
25
26
@Delete(':id')
27
remove(@Param('id') id: string) {
28
return this.usersService.remove(+id);
29
}
30
}

Soporte para Typescript

Desde 2020 los desarrolladores que usan Typescript van en aumento, creo que es por la dimensión de los proyectos actuales y la popularidad del frontend. Como hay muchos datos que conectar entre ambos lados del desarrollo: Backend y Frontend, es necesario promover ciertos estándares para que los nuevos integrantes de un equipo no estén confundidos de que tipo de variables o funciones se deben utilizar en todo el proyecto. Es allí donde Typescript será muy útil. Tampoco olvidar el soporte de autocompletado.
Cuando NestJS usa Typescript, la facilidad de escribir código aumenta considerablemente, y así mismo se reducen los errores en los tipos de datos antes de compilación.
1
// Un modelo de la base de datos usando TypeORM con Typescript
2
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
3
4
@Entity()
5
export class Photo {
6
@PrimaryGeneratedColumn()
7
id: number;
8
9
@Column({ length: 500 })
10
name: string;
11
12
@Column('text')
13
description: string;
14
15
@Column()
16
filename: string;
17
18
@Column('int')
19
views: number;
20
21
@Column()
22
isPublished: boolean;
23
}

Documentación

Lo que más me encanta de un framework es la documentación y ejemplos que se presenten en su sitio web. Una mala documentación es una de las principales razones por la cual un desarrollador junior – mid no se sienta tan motivado a trabajar con un framework web y, por lo tanto, evite su uso. Creo que en este punto NestJS cumple con este requerimiento. Es una de las mejores documentaciones de framework backend que he visto junto a otros proyectos como Laravel.

Soporte GraphQL, OpenAPI, ORM’s, etc.

Con una sección llena de “recetas” (snippets) (https://docs.nestjs.com/recipes) con configuraciones por defecto para la generación de un CRUD, recarga “en caliente”, TypeORM, Sequelize, Swagger, Prisma y muchas otras herramientas (https://docs.nestjs.com/microservices).
¿Necesitar usar GraphQL?, instala unas cuantas librerías y con menos de 10 líneas de código ya agrego soporte para eso. *¿Necesitar una manera visual de exponer ciertos endpoints? *NestJS te tiene cubierto con OpenAPI. ¿En un proyecto prefieres Sequelize como ORM, pero en otro TypeORM porque quieres ver cuál va mejor con tu estilo? Cambia fácilmente entre cualquiera de los ORM haciendo uso de las librerías correspondientes y realizando unas modificaciones en la configuración. Además, si ya has trabajado con ExpressJS, las configuraciones generales son pan comido.
1
// Agregando soporte para GraphQL en una sola línea
2
// Un NPM install es requerido antes
3
import { Module } from '@nestjs/common';
4
import { GraphQLModule } from '@nestjs/graphql';
5
6
@Module({
7
imports: [GraphQLModule.forRoot({})],
8
})
9
export class AppModule {}
Estas creo que son las 5 principales razones por las cuales en cualquier nuevo proyecto que requiera Node para el Backend, yo usaría NestJS sin ninguna duda. Por supuesto hay más features que hacen sencillo el trabajo en el backend, como schedulers, websockets, etc. Todo eso te dejo que lo descubras en su documentación.
Mis posts no son generados por la IA, sin embargo, podrían estar corregidos por ella. El primer borrador siempre es de mi creación

Autor

Escrito por Helmer Davila