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:

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 o passport
  • 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.

Nestjs Modules

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.

Nestjs Controllers

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

Más Recursos