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.

NestJS: Inicializar cierta colección de MongoDB tan pronto como se establezca la conexión.

Soy muy nuevo en NestJs y me gustaría construir una aplicación web que utilice MongoDB.
Así que lo que voy a hacer es que cada vez que la aplicación se cargue, se debe realizar la conexión con MongoDB y agregar algo de lógica en la función de devolución de llamada.

Con el framework Express, este es el código de la lógica que quiero hacer.

mongoose
  .connect(mongoDB, {
    user: process.env.MONGODB<em>USER,
    pass: process.env.MONGODB</em>PASSWORD,
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
  .then(async () => {
    //no mostrar el registro cuando es una prueba
    if (process.env.NODE_ENV !== "test") {
      console.log("Connected to %s", mongoDB);
      console.log("MongoDB está conectado ... \n");

      initDB.InitializeDB();
      dailyReport.DailyReport();
    }
  })
  .catch((err) => {
    console.error("Error al iniciar la aplicación:", err.message);
    process.exit(1);
  });

En el código anterior hay dos funciones.
1ra: Registro si la conexión a la base de datos es exitosa o fallida
2da: Cuando es exitosa, inicializo algunas colecciones y salgo de la aplicación si falla

Vi la documentación de NestJs para implementar esta lógica aquí

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

@Module({
  imports: [MongooseModule.forRoot('mongodb://localhost/nest')],
})
export class AppModule {}

Pero no estoy seguro dónde está la función de devolución de llamada para la conexión con MongoDB.
¿Alguien puede darme respuesta a esto implementando la lógica de Express usando NestJs?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar una función de devolución de llamada para la conexión de MongoDB en NestJs usando MongooseModule, puedes usar el objeto de opciones MongooseModule para pasar una función connectionFactory que devuelva la conexión de Mongoose deseada. Aquí tienes un ejemplo de implementación:

    import { Module } from '@nestjs/common';
    import { MongooseModule, MongooseModuleOptions } from '@nestjs/mongoose';
    import * as mongoose from 'mongoose';
    
    @Module({
      imports: [
        MongooseModule.forRootAsync({
          useFactory: async (): Promise<mongoosemoduleoptions> => {
            const user = process.env.MONGODB_USER;
            const password = process.env.MONGODB_PASSWORD;
            const connection = await mongoose.createConnection('mongodb://localhost/nest', {
              user,
              password,
              useNewUrlParser: true,
              useUnifiedTopology: true,
            });
            // Aquí puedes agregar tu función de devolución de llamada
            connection.on('connected', () => {
              console.log('Conectado a MongoDB');
              initDB.InitializeDB();
              dailyReport.DailyReport();
            });
            return { connection };
          },
        }),
      ],
    })
    export class AppModule {}
    

    En este ejemplo, estamos creando una nueva conexión mongoose usando mongoose.createConnection() y pasando las opciones requeridas. Luego podemos agregar una función de devolución de llamada al objeto connection usando .on('connected', callbackFunction), donde 'connected' es el evento al que estamos escuchando.

    En la función de devolución de llamada, podemos registrar que estamos conectados a MongoDB y ejecutar cualquier tarea de inicialización necesaria.

    Ten en cuenta que deberás importar los módulos necesarios en la parte superior de tu archivo (initDB y dailyReport en este caso).

Comments are closed.