Я работал над API, основанным на NestJS, и вот часть кода, в которой у меня довольно странное поведение.
ПРОБЛЕМА: PagePartModule НЕ импортирует какой-либо модуль, который я добавляю в импорт (в данном случае ImageModule), и поэтому я получаю неопределенное значение при попытке вставить ImageService в распознаватель PagePartModule. Пожалуйста, смотрите код ниже:
// page-part.module.ts
@Module({
imports: [ImageModule],
providers: [PagePartImageResolver],
})
export class PagePartModule {}
// page-part-image.resolver.ts
@Resolver(of => PagePartImage)
export class PagePartImageResolver {
constructor(
private readonly imageService: ImageService
) {}
@ResolveProperty('image', type => Image, { nullable: true })
async image(@Root() pagePart: PagePart) {
// NOTE: pagePart is filled with correct data
// ERROR: "Cannot read property 'find' of undefined",
// this.imageService is undefined
return await this.imageService.find({ id: pagePart.imageId });
}
}
// image.module.ts
@Module({
imports: [DataloaderModule],
providers: [ImageResolver, ImageService],
exports: [ImageService],
})
export class ImageModule {}
// image.service.ts
@Injectable()
export class ImageService {}
Обратите внимание, что я:
1) Добавление ImageService в декоратор экспорта экспорта ImageModule
2) ImageService украшен @Injectable ()
3)Импорт ImageModule (который предоставляет ImageService) через импорт на PagePartModule
4) Инжекция ImageService с помощью конструктора в page-part-image.resolver.ts
Что я пробовал:
- Ошибка не выдаетсяNestJS на время сборки;Как только я запрашиваю поле «image» для распознавателей, появляется сообщение: Cannot read property 'find' of undefined
-> imageService не определено: не внедрено.
- Если я внедряю модуль ImageModule в другой модуль, все работает как положено.
- Даже если ясоздайте сервис, который является частью PagePartModule, и поместите его в провайдеров PagePartModule, он все еще не внедрен в указанный преобразователь - что странно (но попытка импортировать созданный сервис в другой модуль снова работает как положено). - "emitDecoratorMetadata": true
существует в моем tsconfig.json
Я считаю, что я делаю все, что нужно для инъекции, чтобы работать. (В API более десятка модулей, в которых я использую тот же подход, и он работает как положено)
Буду признателен за любые указания относительно того, что может вызвать проблему.