typescript - Hoe definieer je een GraphQL hosttype met een code-first veldresolver?
Ik gebruik NestJS met TypeORM om verbinding te maken met een MongoDB-server die draait op een Docker-image. Ik krijg deze fout wanneer ik probeer de applicatie te starten:
type-metadata.storage.js:263
throw new cannot_determine_host_type_error_1.CannotDetermineHostTypeError(item.schemaName, objectTypeRef === null || objectTypeRef === void 0 ? void 0 : objectTypeRef.name);
^
Error: Cannot determine a GraphQL host type (CreateClassInput?) for the "students" field. Make sure your class is decorated with an appropriate decorator (e.g., @ObjectType()).
at TypeMetadataStorageHost.compileExternalFieldResolverMetadata
De veldresolver is voor een veld genaamd students. Students is een array van StudentOutput-objecten. De ouder van students is gedefinieerd in een GraphQL @ObjectType()-klasse genaamd ClassOutput:
@ObjectType()
export class ClassOutput extends PartialType(UpdateClassInput) {
@IsUUID('4', { each: true })
@Field(() => String)
class_id: string;
@Field(() => [StudentOutput], { defaultValue: [] })
students: StudentOutput[];
De resolver vermeldt correct ClassOutput als het bovenliggende GraphQL-type voor het veld students.
@ResolveField()
students(@Parent() classGQLObject: ClassOutput): Promise<StudentOutput[]> {
return this.studentsService.findStudentsByIDArray(classGQLObject);
}
Het wijzigen van de decorator van ClassOutput van @ObjectType() naar @InputType() heeft de fout niet opgelost. Dit is hoe het `students-veld is gedefinieerd in de TypeORM-entityklasse:
@Entity('classes')
export class ClassesEntity {
@ObjectIdColumn()
_id: ObjectID;
@PrimaryColumn()
class_id: string;
@Column({ type: 'array', default: [] })
students: StudentOutput[];
Waarom kan GraphQL het hoofdtype van students niet vinden wanneer het hoofdtype is gedefinieerd in de resolverfunctie via students(@Parent() classGQLObject: ClassOutput), de gedecoreerde GraphQL-klasse ClassOutput en de entiteit?