typescript - Nestjs cirkulärt beroende med forwardref
Hej allihopa, jag får ett fel med cirkulärt beroende i NestJS. Jag försökte använda forwardref men det hjälper mig inte.
// AuthModule
@Module({
imports: [
forwardRef(() => UserModule),
JwtModule.register({
global: true,
secret: process.env.TOKEN_SECRET,
signOptions: { expiresIn: process.env.TOKEN_DURATION },
}),
],
providers: [AuthService, AuthGuard],
controllers: [AuthController],
exports: [AuthService],
})
export class AuthModule {}
// UserModule
@Module({
imports: [forwardRef(() => AuthModule)],
controllers: [UserController],
providers: [UserService],
exports: [UserService],
})
export class UserModule {}
I tjänsten får jag åtkomst till den andra tjänsten på detta sätt
private readonly authService: AuthService,
== CMD FEL == [Nest] 2788 - 06/10/2023, 12:56:50 PM LOG [InjectorLogger] Nest stötte på ett odefinierat beroende. Detta kan bero på en cirkulär import eller en saknad beroendeförklaring. [Nest] 2788 - 06/10/2023, 12:56:50 PM ERROR [ExceptionHandler] Nest kan inte lösa beroenden för UserService (PrismaService, ?, CONFIGURATION(app)). Vänligen säkerställ att argumentberoendet vid index [1] är tillgängligt i UserModule-kontexten.
Potentiella lösningar:
Är UserModule ett giltigt NestJS-modul?
Om beroende är en leverantör, är det en del av det nuvarande UserModule?
Om ett beroende exporteras från en separat @Module, importeras den modulen inom UserModule?
@Module({ imports: [ /* the Module containing dependency */ ] })
Varför fick jag cirkulärt beroende !!
Svar #1
Detta svar kan inte hjälpa dig att lösa problemet, men det ger dig en bättre förståelse för kopplingarna mellan modulerna
Du kan integrera nestjs-spelunker
Ibland vill du visualisera modulernas ömsesidiga beroenden så att du kan resonera bättre om dem. SpelunkerModule har en graph-metod som bygger på resultatet av explore-metoden genom att generera en dubbellänkad graf där varje nod representerar en modul och varje kant en länk till den modulens beroenden eller beroende moduler.
Svar #2
Du kan använda i konstruktorn:
constructor(
@Inject(forwardRef(() => TestService))
privado testService: TestService,
)
Som ett alternativ kan du även använda:
constructor(
@Inject(REQUEST)
privado testService: TestService,
)
Även om jag tycker att det är bättre att använda den första, beror det också på vad du använder.
om du använder pipes rekommenderar jag att du kollar på detta problem: https://github.com/nestjs/nest/issues/4367
