Исходя из фона laravel, я пытаюсь попасть в node.js / graphQL / mongoDB и наткнулся на фреймворк nest.js
, который выглядит довольно хорошо. Поэтому я попытался настроить простой API-интерфейс GraphQL для тестирования и понимания того, как все это работает. Для этого я создал схему мангуста для пользователя, а также модель (type-graphql
) и DTO
для создания такого пользователя с помощью мутации.
Это работает довольно хорошо, но затем я хотел добавить вложенный объект с именем settings в user, чтобы попробовать, как это будет работать, и я просто не понимаю его, а также не могу найти * nest.js
или type-graphql
конкретных примеров. для такой реализации. Разве это просто невозможно с использованием подхода «сначала код» nest.js
? Поскольку генератор схемы всегда выдает мне ошибку при компиляции, говоря:
"UnhandledPromiseRejectionWarning: Ошибка: невозможно определить тип вывода GraphQL для настроек".
user.model.ts
import { Field, ID, ObjectType } from 'type-graphql'
import UserSettingsType from './user.settings.type'
@ObjectType()
export class User {
@Field((type) => ID)
id: string
@Field()
email: string
@Field((type) => UserSettingsType)
settings: {}
}
user.settings.type.ts
import { Field, ObjectType } from 'type-graphql'
@ObjectType()
export class UserSettings {
@Field()
theme: string
@Field()
description?: string
@Field((type) => [String])
visited: string[]
}
новый-user.input.ts
import { IsOptional, IsEmail, IsBoolean, Length, MaxLength, IsArray } from 'class-validator'
import { Field, InputType } from 'type-graphql'
import UserSettingsType from '../graphql/user.settings.type'
@InputType()
export class NewUserInput {
@Field()
@IsEmail()
email: string
@Field((type) => UserSettingsType)
@IsOptional()
@IsArray()
settings: {}
}
Как видите, я определил новый тип UserSettings в отдельном файле (следуя рекомендациям nest.js
) и выделил его как тип в модели User, а также в классе DTO для нового пользователя. Ошибка генерируется для DTO class
(НЕ для модели), и если я изменяю ее там на что-то вроде [String] вместо UserSettingsType, она компилируется.
Я не уверен, что вам нужна решающая логика или логика сервиса / мангуста для этой актуальной проблемы, если да, я тоже могу опубликовать это, конечно!