qhamid
qhamid

Reputation: 21

ERROR [ExceptionHandler] Nest can't resolve dependencies of the UserService

I have a nest js app with Auth and User modules The Auth module is written like this It imports the User module due to the AuthService which uses it

import { Module, forwardRef } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { GoogleStrategy } from './google.strategy';
import { PassportModule } from '@nestjs/passport';
import { JwtAuthModule } from 'src/jwt/jwt.module';
import { UserModule } from 'src/user/user.module';

@Module({
  controllers: [AuthController],
  providers: [AuthService, GoogleStrategy],
  imports: [
    UserModule,
    JwtAuthModule,
    PassportModule.register({ defaultStrategy: 'google' }),
  ],
  exports: [AuthService],
})
export class AuthModule {}

The User module is written like this

import { Module, forwardRef } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { PrismaModule } from 'src/prisma/prisma.module';
import { JwtAuthModule } from 'src/jwt/jwt.module';
import { AuthModule } from 'src/auth/auth.module';
import { UploadModule } from 'src/upload/upload.module';

@Module({
  controllers: [UserController],
  providers: [UserService],
  imports: [
    PrismaModule,
    JwtAuthModule,
    forwardRef(() => AuthModule),
    UploadModule,
  ],
  exports: [UserService],
})
export class UserModule {}

It uses forwardRef to avoid circular dependency error

and the UserService is using the AuthService like this

@Injectable()
export class UserService {
  constructor(
    private readonly authService: AuthService,
    private readonly prismaService: PrismaService,
  ) {}

Here is the App module also

import { Module, ValidationPipe } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AuthModule } from './auth/auth.module';
import { APP_PIPE } from '@nestjs/core';
import { UploadModule } from './upload/upload.module';
import { ImageModule } from './image/image.module';
import { UserModule } from './user/user.module';
import { PrismaModule } from './prisma/prisma.module';

@Module({
  imports: [
    ConfigModule.forRoot(),
    UserModule,
    AuthModule,
    UploadModule,
    ImageModule,
    PrismaModule,
  ],
  providers: [
    {
      provide: APP_PIPE,
      useClass: ValidationPipe,
    },
  ],
})
export class AppModule {}

But it throws this error

ERROR [ExceptionHandler] Nest can't resolve dependencies of the UserService (?, PrismaService). Please make sure that the argument dependency at index [0] is available in the UserModule context.

Potential solutions:
- Is UserModule a valid NestJS module?
- If dependency is a provider, is it part of the current UserModule?
- If dependency is exported from a separate @Module, is that module imported within UserModule?
  @Module({
    imports: [ /* the Module containing dependency */ ]
  })

I tried to add services to app module and a lot of things but nothing helped

Upvotes: 0

Views: 737

Answers (2)

qhamid
qhamid

Reputation: 21

I found the Error on the docs Here is the new UserService

@Injectable()
export class UserService {
  constructor(
    @Inject(forwardRef(() => AuthService))
    private readonly authService: AuthService,
    private readonly prismaService: PrismaService,
  ) {}

Upvotes: 0

michal1702
michal1702

Reputation: 11

I tried to reproduce your issue and moved forwardRef to AuthModule - like that forwardRef(() => UserModule) and it run without any problem. Please note that circular dependencies are considered bad practice. Maybe it's worth separating one more module? Another thing is that we don't see where you import AuthService in UserService from. This may be an issue with using a separate file to group imports - docs for reference

Upvotes: 1

Related Questions