32-Modulos

 directorios que se están usando en el ejemplo:

Copy
Download
src/
│
├── cars/
│   ├── cars.controller.ts   # Controlador (maneja las rutas HTTP)
│   ├── cars.module.ts       # Módulo (registra controlador y servicio)
│   └── cars.service.ts      # Servicio (lógica de negocio)
│
├── app.module.ts            # Módulo principal de la aplicación
└── main.ts                  # Punto de entrada (configuración de NestJS)

Explicación breve:

  • cars/: Contiene los archivos específicos del recurso Cars (controlador, módulo y servicio).

  • app.module.ts: Importa y organiza los módulos de la aplicación (en este caso, CarsModule).

  • main.ts: Inicia la aplicación y configura el servidor.

Esta estructura sigue las buenas prácticas de NestJS, separando responsabilidades en capas claras.

Módulos en NestJS: La Base de tu Aplicación

Introducción

Cuando comenzamos a explorar NestJS, es normal encontrarnos con una estructura inicial llena de archivos que no siempre entendemos. En mi caso, decidí borrar algunos (como controller y service) para empezar desde cero y explicar cada concepto paso a paso.

Si has hecho lo mismo, ¡no te preocupes! Es mejor construir un proyecto minimalista para entender cada pieza antes de avanzar.


¿Qué son los módulos en NestJS?

Los módulos son bloques fundamentales (Building Blocks) en NestJS. Su función principal es agrupar y organizar funcionalidades específicas de tu aplicación. Por ejemplo:

  • Un módulo de Autenticación manejaría todo lo relacionado con login, registro y tokens.

  • Un módulo de Carros gestionaría peticiones, servicios y lógica exclusiva de vehículos.

En pocas palabras, un módulo es un contenedor que reúne controladores, servicios, proveedores y más, manteniendo tu código ordenado y modular.


El Módulo Principal: AppModule


Copy
Download
src/
│
├── cars/
│   ├── cars.controller.ts   # Controlador (maneja las rutas HTTP)
│   ├── cars.module.ts       # Módulo (registra controlador y servicio)
│   └── cars.service.ts      # Servicio (lógica de negocio)
│
├── app.module.ts            # Módulo principal de la aplicación
└── main.ts                  # Punto de entrada (configuración de NestJS)

Al crear un proyecto nuevo, NestJS genera un módulo raíz (AppModule) en app.module.ts. Este es el punto de entrada de tu aplicación y tiene dos responsabilidades clave:

  1. Importar otros módulos: Por ejemplo, UsersModule, AuthModule, etc.

  2. Definir dependencias globales: Como controladores y servicios principales.

Si borraste archivos iniciales (como yo), verás errores en AppModule porque las referencias a esos archivos ya no existen. ¡Es normal! Limpia esas referencias y deja solo lo esencial:

typescript

import { Module } from '@nestjs/common';


@Module({

  imports: [],       // Otros módulos que usará tu app

  controllers: [],   // Controladores (rutas)

  providers: [],     // Servicios o lógica de negocio

})

export class AppModule {}


El Archivo main.ts: El Punto de Inicio


Copy
Download
src/
│
├── cars/
│   ├── cars.controller.ts   # Controlador (maneja las rutas HTTP)
│   ├── cars.module.ts       # Módulo (registra controlador y servicio)
│   └── cars.service.ts      # Servicio (lógica de negocio)
│
├── app.module.ts            # Módulo principal de la aplicación
└── main.ts                  # Punto de entrada (configuración de NestJS)

El archivo main.ts es el primer código que ejecuta NestJS. Aquí se crea la aplicación y se especifica el módulo principal (AppModule):

typescript

import { NestFactory } from '@nestjs/core';

import { AppModule } from './app.module';


async function bootstrap() {

  const app = await NestFactory.create(AppModule);

  await app.listen(3000); // Puerto por defecto (cambiable)

}

bootstrap();

  • NestFactory.create(): Instancia tu aplicación usando AppModule.

  • app.listen(): Inicia el servidor en el puerto asignado (ej. 3000).


Probando la Aplicación

Al ejecutar npm run start:dev, NestJS inicia el servidor. Si abres http://localhost:3000 en tu navegador o Postman, verás un error 404. ¡Esto es bueno! Significa que:

  • El servidor está funcionando.

  • NestJS responde con JSON ante rutas no definidas (comportamiento por defecto).


Conclusión y Próximos Pasos

Los módulos son el corazón de NestJS, y aunque al principio pueden parecer abstractos, su utilidad brilla cuando organizas tu código en funcionalidades independientes.

En el próximo post, crearemos nuestro primer módulo personalizado (¡aparte de AppModule!) y conectaremos rutas, controladores y servicios.

¿Te quedaron dudas? Déjalas en los comentarios. ¡Nos vemos en la siguiente parte! 🚀


Bonus: Recursos Recomendados

Comentarios

Entradas más populares de este blog

48. ValidationPipe - Class Validator y Class Transformer

49. Pipes Globales - A nivel de Aplicación