Nest.js не может разрешать зависимости

Я пытаюсь использовать ConfigService в моем users.module.ts но я получаю

Ошибка: Nest не может разрешить зависимости UsersService (UserRepository, HttpService,?). Убедитесь, что аргумент ConfigService с индексом [2] доступен в контексте UsersModule.

Возможные решения:

  • Если ConfigService является поставщиком, является ли он частью текущего модуля UsersModule?
  • Если ConfigService экспортируется из отдельного модуля @Module, импортируется ли этот модуль в UsersModule?

Я импортировал ConfigModule в свой UsersModule, но все еще не работает:(

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      expandVariables: true,
    }),
    TypeOrmModule.forRoot(),
    UsersModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

users.module.ts

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([User])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService],
})

export class UsersModule {}

users.service.ts

export class UsersService {

 constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository<User>,
    private readonly httpService: HttpService,
    private readonly configService: ConfigService,
  ) {}

}

2 ответа

Решение

Вам все равно придется объявить ConfigService в поставщиках users.module.ts. См. Пример ниже.

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      expandVariables: true,
    }),
    TypeOrmModule.forRoot(),
    UsersModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

users.module.ts

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
  controllers: [UsersController],
  providers: [UsersService, ConfigService],
  exports: [UsersService],
})

export class UsersModule {}

Надеюсь это поможет.

Спасибо.

У вас есть кое-что перекрестное (я тоже испытал ту же боль в начале). Лучше всего создать собственный репозиторий для обработки логики базы данных.

Сначала объявите UserRepository:

@EntityRepository(User)
export class UserRepository extends Repository<User> {

    // add your custom db related method here later..

}

Тогда в вашем AppModule вам нужно объявить свои объекты следующим образом:

@Module({

    imports: [

        TypeOrmModule.forRoot({

            type: 'mysql',
            host: process.env.DB_HOSTNAME || 'localhost',
            port: Number.parseInt(process.env.DB_PORT) || 3306,
            username: process.env.DB_USERNAME || 'root',
            password: process.env.DB_PASSWORD || 'mysql',
            database: process.env.DB_NAME || 'nestjs',
            synchronize: process.env.DB_SYNCHRONIZE === 'true' || true,
            keepConnectionAlive: true,
            entities: [

                User

            ]

        })

...

А потом в твоем UsersModule объявите свой репозиторий:

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService],
})

export class UsersModule {}
Другие вопросы по тегам