Nest: Módulos

Aprende a usar módulos en NestJS para organizar y estructurar tu aplicación de manera eficiente. Guía actualizada con ejemplos prácticos.

NestJS es un framework de Node.js que facilita la construcción de aplicaciones escalables y mantenibles. Una de sus características más destacadas es el uso de módulos para organizar el código. En esta guía, exploraremos cómo los módulos en NestJS pueden ayudarte a estructurar tu aplicación de manera eficiente.

¿Qué es un módulo en NestJS?

Un módulo en NestJS es una clase decorada con @Module(). Los módulos son el mecanismo principal para organizar los componentes de una aplicación, como controladores y proveedores. Cada aplicación NestJS tiene al menos un módulo raíz, pero puede tener muchos más módulos para dividir la funcionalidad.

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

Estructura de un módulo

Un módulo en NestJS tiene varias partes clave:

  • Controladores: Son responsables de manejar las solicitudes entrantes y devolver las respuestas al cliente.
  • Proveedores: Son los responsables de la lógica de negocio y pueden ser inyectados en los controladores o en otros proveedores.
  • Importaciones: Permiten que un módulo use los proveedores exportados por otros módulos.
  • Exportaciones: Permiten que un módulo comparta sus proveedores con otros módulos.
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { CommonModule } from '../common/common.module';

@Module({
  imports: [CommonModule],
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService],
})
export class CatsModule {}

Módulo raíz

El módulo raíz es el punto de entrada de la aplicación. Se define en el archivo app.module.ts y se pasa al método NestFactory.create en el archivo main.ts.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';

@Module({
  imports: [CatsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Organización de módulos

Dividir la aplicación en módulos ayuda a mantener el código organizado y facilita el mantenimiento. Algunos patrones comunes incluyen:

  • Módulos por característica: Cada módulo agrupa la lógica relacionada con una característica específica.
  • Módulos compartidos: Contienen funcionalidades que son reutilizadas por múltiples módulos.
  • Módulos globales: Son módulos que deben estar disponibles en toda la aplicación.

Módulos dinámicos

NestJS también soporta la creación de módulos dinámicos. Estos permiten la configuración del módulo en tiempo de ejecución. Se utilizan para módulos que requieren configuración basada en parámetros externos.

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

@Module({})
export class DynamicModule {
  static forRoot(config: ConfigOptions): DynamicModule {
    return {
      module: DynamicModule,
      providers: [
        {
          provide: 'CONFIG_OPTIONS',
          useValue: config,
        },
      ],
    };
  }
}
Certifícate en Nest con CertiDevs PLUS

Lecciones de este módulo de Nest

Lecciones de programación del módulo Módulos del curso de Nest.

Ejercicios de programación en este módulo de Nest

Evalúa tus conocimientos en Módulos con ejercicios de programación Módulos de tipo Test, Puzzle, Código y Proyecto con VSCode.