No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
12 Hrs
36 Min
39 Seg

Conexión como inyectable

7/24
Recursos

Veamos una forma de realizar la conexión a una base de datos MongoDB con el driver oficial.

Estableciendo la conexión asíncrona

Conectarse a una base de datos es un procedimiento asíncrono. Este puede ejecutarse de manera global al inicializar el proyecto NestJS y, posteriormente, gracias a las características de NestJS, inyectar la conexión en cualquier servicio para hacer consultas.

Paso 1: establecer la conexión de forma global

Creamos un módulo al que denominaremos DatabaseModule, que contiene la configuración de forma global para establecer la conexión a una base de datos, a la vez que inyecta un servicio denominado “MONGO”. Este puede ser utilizado por cualquier otro servicio que requiere la conexión.

// src/database/database.module.ts
import { MongoClient } from 'mongodb';

@Global()
@Module({
  providers: [
    {
      provide: 'MONGO',
      useFactory: async () => {
        const uri =
          'mongodb://mongo:secret@localhost:27017/nestjs_mongo?authSource=admin';
        const client = new MongoClient(uri);
        await client.connect();
        const database = client.db('platzi-store');
        return database;
      },
    },
  ],
  exports: ['API_KEY', 'MONGO'],
})
export class DatabaseModule {}

Paso 2: inyección del servicio

Inyectamos el servicio que lleva el nombre de “MONGO” en cualquier otro servicio que requiere su utilización.

// src/app.service.ts
import { Db } from 'mongodb';

@Injectable()
export class AppService {
  constructor(@Inject('MONGO') private database: Db,) {}
}

De esta manera, solo usando el driver oficial de MongoDB, puedes crear un servicio reutilizable para establecer la conexión a tu base de datos.


Contribución creada por: Kevin Fiorentino.

Código de ejemplo de: conexión como inyectable

// src/database/database.module.ts
import { MongoClient } from 'mongodb'; // 👈 Import MongoClient 

@Global()
@Module({
  providers: [
    ...
    {
      provide: 'MONGO',
      useFactory: async () => { // 👈 Inject w/ useFactory
        const uri =
          'mongodb://root:root@localhost:27017/?authSource=admin&readPreference=primary';
        const client = new MongoClient(uri);
        await client.connect();
        const database = client.db('platzi-store');
        return database;
      },
    },
  ],
  exports: ['API_KEY', 'MONGO'],  // 👈 add in exports
})
// src/app.service.ts
import { Injectable, Inject } from '@nestjs/common';
import { Db } from 'mongodb'; // 👈 Import DB Type

@Injectable()
export class AppService {
  constructor(
    // @Inject('API_KEY') private apiKey: string,
    @Inject('TASKS') private tasks: any[],
    @Inject('MONGO') private database: Db,
    @Inject(config.KEY) private configService: ConfigType<typeof config>,
  ) {}

  getHello(): string {
    const apiKey = this.configService.apiKey;
    const name = this.configService.database.name;
    return `Hello World! ${apiKey} ${name}`;
  }
  getTasks() { }  // 👈 Create new method
}

Aportes 4

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

igual otra forma de conectarse a mongo es usando el modulo @nestjs/mongoose aqui dejo la documentacion muy buena por cierto https://docs.nestjs.com/techniques/mongodb

El Patron Singleton, es diferent de los pricipios SOLID

Este curso está buenísimo!

👏