И так... у меня есть приложение на 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
.
Неужели это считается нормой ? Вот так вот тянуть кучу зависимостей ?