Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

216
Vistas
Módulo Globle sin importar no funciona nestjs

Estoy tratando de implementar un módulo global en nest.js

He creado un servicio como el siguiente.

 export interface ConfigData { DB_NAME: string; } @Injectable() export class ConfigManager { private static _instance?: ConfigManager; public static configData:ConfigData | null; private constructor() { console.log(ConfigManager) if (ConfigManager._instance) ConfigManager._instance = this; else{ ConfigManager._instance = new ConfigManager() ConfigManager.configData = <ConfigData|null><unknown>ConfigManager.fetchSecretData() } } private static async fetchSecretData():Promise<ConfigData|null>{ // some data from db } // static get instance() { // return ConfigManager._instance ?? (ConfigManager._instance = new ConfigManager()); // //return ConfigManager._instance ?? (ConfigManager._instance = ConfigManager.fetchSecretData()) //new ConfigManager()); // } }

configuración.módulo.ts

 @Global() @Module({ providers: [ConfigManager], exports: [ConfigManager], }) export class ConfigurationModule {}

y en app.module.ts agregó ConfigurationModule en las importaciones.

Además, al agregar un constructor privado en el servicio, no se puede agregar el archivo module.ts.

Espero poder configData en cualquier lugar sin importar el ConfigManager. pero no funciona...

ConfigManager no está disponible sin importar.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Solo marcó su módulo con el decorador @Global , pero NestJS necesita inicializar ese módulo de alguna manera y hacer que esté disponible globalmente.

Lo que esto significa es que debe agregar este módulo a su módulo de aplicación central y NestJS hará el resto por usted, así que algo como esto (o como se llame su módulo raíz):

 @Module({ imports: [ConfigurationModule], }) export class AppModule {}

De la documentación

El decorador @Global() hace que el módulo tenga un alcance global. Los módulos globales deben registrarse solo una vez, generalmente por el módulo raíz o central.

about 4 years ago · Juan Pablo Isaza Denunciar

0

esto es 'por diseño' de es6/ts: no puede usar la clase sin importarla.

está mezclando los conceptos de di (ejemplificación/composición) con importación (definiendo qué clases están disponibles en el alcance del módulo)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Los módulos globales en nido solo significan que no tiene que incluir ese módulo en las importaciones: [] de cualquier otro módulo que requiera sus proveedores. Los proveedores en el módulo global aún se comportan como proveedores normales, es decir, debe inyectarlo donde lo necesite.

Entonces, en su caso, dado que ya agregó @Global() a ConfigManager e importó ConfigurationModule en app.module.ts , no necesitará agregar ConfigurationModule en las importaciones para ningún otro módulo que desee usar ConfigManager . Sin embargo, aún necesitaría inyectar el proveedor ConfigManager ; eso es lo que significa @Injectable() :).

Para hacer la inyección, necesita un constructor(private configManager: ConfigManager) {} en la clase que necesita usar ConfigManager , y dado que necesita acceso al tipo de clase, necesitará import { ConfigManager } from '../path/to/ConfigManager' también.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda