Actualmente estoy leyendo la documentación de una aplicación Nest.js usando Prisma. Siguiendo la documentación, he creado el siguiente Servicio.
import { INestApplication, OnModuleInit } from "@nestjs/common"; import { PrismaClient } from "@prisma/client"; export class PrismaService extends PrismaClient implements OnModuleInit { async onModuleInit() { console.log('onModuleInit PrismaService') await this.$connect(); } async enableShutdownHooks(app: INestApplication){ this.$on('beforeExit', async () => { console.log('PrismaService enableShutdownHooks beforeExit') await app.close(); }); } }La documentación describe el uso de lo siguiente.
import { Module } from '@nestjs/common'; import { Prisma } from '@prisma/client'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { CsvParsersModule } from './csv-parsers/csv-parsers.module'; import { PrismaModule } from './prisma/prisma.module'; import { PrismaService } from './prisma/prisma.service'; @Module({ imports: [CsvParsersModule], controllers: [AppController], providers: [AppService, PrismaService] }) export class AppModule {}Sin embargo, dicho código hará que se llame repetidamente a onModuleInit cuando el Servicio se registre en otro lugar.
import { Global, Module } from '@nestjs/common'; import { CsvParsersService } from './csv-parsers.service'; import { CsvParsersController } from './csv-parsers.controller'; import { PrismaService } from 'src/prisma/prisma.service'; @Module({ controllers: [CsvParsersController], providers: [CsvParsersService, PrismaService], exports: [CsvParsersService] }) export class CsvParsersModule {} [Nest] 78737 - 2022/07/21 8:05:23 LOG [NestFactory] Starting Nest application... [Nest] 78737 - 2022/07/21 8:05:23 LOG [InstanceLoader] AppModule dependencies initialized +25ms [Nest] 78737 - 2022/07/21 8:05:23 LOG [InstanceLoader] CsvParsersModule dependencies initialized +0ms [Nest] 78737 - 2022/07/21 8:05:23 LOG [RoutesResolver] AppController {/}: +8ms [Nest] 78737 - 2022/07/21 8:05:23 LOG [RouterExplorer] Mapped {/, GET} route +1ms [Nest] 78737 - 2022/07/21 8:05:23 LOG [RoutesResolver] CsvParsersController {/csv-parsers}: +0ms [Nest] 78737 - 2022/07/21 8:05:23 LOG [RouterExplorer] Mapped {/csv-parsers, POST} route +0ms onModuleInit PrismaService onModuleInit PrismaService [Nest] 78737 - 2022/07/21 8:05:23 LOG [NestApplication] Nest application successfully started +51msCreo que el mejor proceso es que onModuleInit se llame solo una vez. ¿Cómo debería resolverse esto?
registraste ese servicio dos veces, es por eso que obtuviste dos instancias de la misma clase.
Solo puede agregarlo una vez en algunos de esos módulos y luego exportarlo a otro.