CoDeR2006
@CoDeR2006
TypeScript

Как импортировать | экспортировать services в NestJS правильно?

И так... у меня есть приложение на NestJS пишу недавно так что многого не знаю, вчера залупился с такой тупой ошибкой:
Error: Nest can't resolve dependencies of the TelegramService (?, PrismaService). Please make sure that the argument TelegramValidateService at index [0] is available in the AuthModule context.

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


Казалось бы, добавь ты этот TelegramValidateService в этот AuthModule, окей:
@Module({
  controllers: [AuthController],
  providers: [AuthService, TelegramService, TelegramValidateService],
})
export class AuthModule {}


Запускаю, ловлю вторую ошибку:
Error: Nest can't resolve dependencies of the TelegramService (TelegramValidateService, ?). Please make sure that the argument PrismaService at index [1] is available in the AuthModule context.

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


Тут уже нужно добавить PrismaService в AuthModule:
@Module({
  controllers: [AuthController],
  providers: [AuthService, TelegramService, TelegramValidateService, PrismaService],
})
export class AuthModule {}


Запускаю, все ок.

Но вот тут и мой вопрос, какого я должен делать эти тупые providers еще и такой пачкой, объясняю, PrismaService и AuthModule (которые мне пришлось записать в providers) используются в TelegramService (только его я хочу использовать), почему я не могу просто напросто его засунуть в providers, вот так:
@Module({
  controllers: [AuthController],
  providers: [AuthService, TelegramService],
})
export class AuthModule {}

а должен тянуть эти зависимости, прошу учесть что тут вроде нет никаких круговых зависимостей (Circular dependency).

Вот для наглядности код:
telegram.module.ts
@Module({
  imports: [ConfigModule],
  controllers: [TelegramController],
  providers: [TelegramService, TelegramValidateService, PrismaService],
  exports: [TelegramService],
})
export class TelegramModule {}


telegram.service.ts (главное это то что он использует внутри себя)
@Injectable()
export class TelegramService {
  constructor(
    private readonly telegramValidateService: TelegramValidateService,
    private readonly prismaService: PrismaService
  ) {}


telegram.validate.service.ts
@Injectable()
export class TelegramValidateService {
  constructor(private readonly configService: ConfigService) {}


auth.module.ts // ХОТЕЛОСЬ БЫ ТАК
@Module({
  controllers: [AuthController],
  providers: [AuthService, TelegramService],
})
export class AuthModule {}


// РАБОТАЕТ ТОЛЬКО ТАК
@Module({
  controllers: [AuthController],
  providers: [AuthService, TelegramService, TelegramValidateService, PrismaService],
})
export class AuthModule {}


Вот такая у меня непонятка, и проблема, и еще такой вопрос, не менее важный, можно ли делать как я, у меня у одного telegram.module.ts два сервиса: telegram.service.ts и telegram.validate.service.ts.

Ребят прошу, объясните мне этот глупый момент, почему именно так, почему если я уже написал в providers в telegram.module.ts вот так
providers: [TelegramService, TelegramValidateService, PrismaService],
и мне захотелось где-то подключить функцию из telegram.service.ts я еще должен тянуть все это например в auth.module.ts вот так:
providers: [AuthService, TelegramService, TelegramValidateService, PrismaService]
хотя именно в auth.module.ts такие сервисы как - TelegramValidateService, PrismaService не используются, используется только функция с telegram.service.ts которая уже использует TelegramValidateService, PrismaService. Неужели это считается нормой ? Вот так вот тянуть кучу зависимостей ?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы