Si desarrollas aplicaciones en Nodejs, quizas sabes que uno de los frameworks más populares de Node es Express, este es simple de usar y puedes extenderlo facilmente con módulos de terceros (a traves de npm).
Pero en proyectos backend grandes, tambien significa que debes elaborar la mayoria de funcionalidades tu mismo, casi desde cero. Claro, esto te da mucho control de tu proyecto, pero tambien significa que debes hacer tareas repetitivas, como añadir:
- Validaciones de Peticiones (usando modulos como express-validator, Joi, Zod, class-validator)
- Subida de archivos (usando modulos como multer, express-fileupload)
- Seguridad (usando modulos como jsonwebtoken, Sesiones, Helmet)
- Generar documentacion (con OpenAPI)
- Quizas configurar Typescript (ts-node, ts-node-dev)
- Configurar GraphQL (Apollo)
o si usas arquitectura de Micoservicios debes configurarlo tambien desde cero.
Es por esto que tambien tenemos frameworks backend que usan express por debajo y que facilitan la creación de todas estas funcionalidades que te he mencionado. Uno de estos es Nestjs.
¿Qué es Nestjs?
Nestjs es un framework de Nodejs que te permite crear aplicaciones web Backend escalables de forma rápida, usando Typescrip. Puede integrarse tanto con Express como con Fastify (otro framework backend de Nodejs)
Y usandolo puedes desarrollar REST y GraphQL APIs facilmente, ademas que tambien puedes crear Aplicaciones de multiples paginas (MPA) con Handlebars y que usan el patron MVC (* Modelo, Vista, Controlador o Model View Controller*) similar a frameworks de otros lenguajes de programacon como Laravel en PHP o Ruby on Rails.
Tambien posee multiples modulos para añadir
- Conexión a base de datos, ya sean NoSQL (Mongodb, Redis) o SQL (MySQL, Mariadb, PostgreSQL) a traves de ORMs (Object Relational Mapping) y ODMs(Object Document Mapping) como
TypeORM
,Prisma
,Mongoose
,MicroORM
- Seguridad (JWT, y Rutas protegidas) a traves de
jsonwebtoken
opassport
- Módulos de Streamming, el modulo
Stream
de Nodejs - Validaciones, usando
class-validator
- Documentacion con Swagger, usando
@nestjs/swagger
- Microservicios, usando
@nestjs/microservices
Y muchas más funcionalidades requeridas en el mundo Backend como Caching, Rate-Limit, Logging, CORS, WebSockets.
Estructura de proyectos en Nestjs
La forma en la que nestjs organiza los proyectos es principalmente a traves de modulos, similar a como los frameworks de frontend organizan una interfaz en componentes.
Es decir si tenemos una aplicacion que esta compuesta por rutas como:
- /users
- /products
- /categories
- /orders
Cada uno de estos puede ser un modulo en Nestjs.
A su vez estos módulos tambien pueden estar divididos en controladores, y servicios:
users
├── users.controller.ts
├── users.module.ts
└── users.service.ts
Los controladores, permiten definir las rutas que se pueden visitar, sus metodos HTTP (GET, POST, PUT, DELETE) y que funciones se ejecutarán a partir de estas peticiones.
De esta forma es como luce un controlador en código:
@Controller('cats') // nombre de la ruta
export class CatsController {
@Get() // metodo HTTP
findAll(): string { // controlador
return 'This action returns all cats'; // Respuesta
}
}
Mientras que los servicios tambien son clases que permiten comunicarse con bases de datos o otros Backends. Ademas que cada uno puede tener su propios archivos de testing (Test unitarios).
De hecho el creador de Nestjs, toma inspiracion del framework Frontend Angular para la creacion de esta estructura.
Aunque todo esto, es solo una parte de Nestjs, ya que tambien cuenta con conceptos como:
- Providers, las cuales permite compartir e inyectar logica en toda la aplicacion (Dependency Injection)
- Entities, para poder difinir tablas o colecciones en bases de datos
- DTO (Data Transfer Objects), para definir que datos el cliente esta enviando al backend
- Middlewares, las cuales son funciones que procesan código antes de llegar a los controladores.
Y muchos otras caracteristicas más (Pipes, Guards, Interceptos, Custom Decorators)
Nestjs CLI
Nest tambien viene con una muy util Herramienta de consola o CLI (Common Line Interface), llamada NEST CLI y que puedes instalar con el comando:
npm install -g @nestjs/cli
Similar al CLI de Angular.
Este CLI te evita tener que escribir código repetitivo y frecuente como podrian ser los:
- Controladores, para crear Rutas del servidor usando
nest g controller
- Servicios, para comunicarse con bases de datos o otros Backend usando
nest g service
- Módulos para agrupar rutas,
nest g module
- GraphQL, para generar queries y Mutaciones,
nest g resolver
- Testing, para genear archivos spec para hacer Test unitarios
Adema ya viene con Jest configurado como Framework para hacer End To end Testing (E2E Testing)
Todo esto hace que nestjs, sea uno de los frameworks más completos y profesionales de Nodejs, y uno de los que puede ayudarte a crear código de backend en minutos.
Para saber más puedes encontrar todos los tutoriales de Nest, en mi sitio faztweb.com/nestjs