es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo conectar mongoDB con los parámetros de la solicitud.

Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.

Soy un novato con Nestjs, quiero que cada solicitud al servidor Nestjs se conecte a una base de datos separada según los parámetros de la solicitud. Creo que puedo usar mongooseModule.forRoot en los submódulos pero no puedo importar el parámetro de conexión, o usar mongoose.createConnection entonces nestjs no puede resolver.

Necesito ayuda, si alguien puede ayudarme, agradezco a todos por leer.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hola,

    Si desea que cada solicitud se conecte a una base de datos separada según los parámetros de la solicitud en NestJS, puede lograrlo mediante el registro de módulos dinámicos. Aquí tiene un ejemplo de cómo puede hacerlo con Mongoose:

    En primer lugar, cree un módulo dinámico que recibirá los parámetros y configurará la conexión de Mongoose en consecuencia:

    import { Module, DynamicModule, Global } from '@nestjs/common';
    import { MongooseModule } from '@nestjs/mongoose';
    import { ConnectionOptions } from 'mongoose';
    
    @Global()
    @Module({})
    export class DatabaseModule {
      static forRoot(options: ConnectionOptions): DynamicModule {
        const mongooseModule = MongooseModule.forRootAsync({
          useFactory: async () => {
            return options;
          },
        });
    
        return {
          module: DatabaseModule,
          imports: [mongooseModule],
          exports: [mongooseModule],
        };
      }
    }
    

    Luego, en sus submódulos, puede importar este módulo dinámico y usarlo para crear conexiones separadas para cada solicitud:

    import { Module } from '@nestjs/common';
    import { DatabaseModule } from './database.module';
    import { MySchema } from './my.schema';
    
    @Module({
      imports: [DatabaseModule],
    })
    export class MyModule {
      constructor(private readonly databaseModule: DatabaseModule) {}
    
      async handleRequest(params: any): Promise<any> {
        const connection = await this.databaseModule.getConnection(
          `my-connection-${params}`,
        );
    
        const model = connection.model('MyModel', MySchema);
    
        // Use the model to query the database
      }
    }
    

    Tenga en cuenta que en lugar de usar mongooseModule.forRoot, estamos utilizando MongooseModule.forRootAsync para permitir el paso de opciones dinámicas. Luego, en los submódulos, importamos el DatabaseModule y usamos su método getConnection para obtener una conexión separada para cada solicitud.

    ¡Espero que esto ayude! Si tiene más preguntas, hágamelo saber.

Comments are closed.