web-dev-qa-db-fra.com

Le générateur de schéma ne peut pas déterminer le type de sortie GraphQL pour un objet personnalisé dans DTO

Venant d'un laravel background j'essaye d'entrer dans node.js/graphQL/MongoDB et suis tombé sur nest.js cadre qui a l'air plutôt sympa. J'ai donc essayé de mettre en place une API GraphQL simple pour tester et comprendre comment tout cela fonctionne. J'ai donc créé un schéma mangouste pour un utilisateur ainsi qu'un modèle (type-graphql) et un DTO pour créer un tel utilisateur via une mutation.

Cela fonctionne très bien, mais je voulais ensuite ajouter un objet imbriqué appelé paramètres au sein de l'utilisateur pour essayer comment cela fonctionnerait et je ne l'obtiens pas et je ne trouve pas non plus nest.js ou type-graphql exemples spécifiques pour une telle implémentation. N'est-ce tout simplement pas possible en utilisant l'approche "code first" de nest.js? Parce que le générateur de schéma me donne toujours une erreur lors de la compilation disant:

"UnhandledPromiseRejectionWarning: Erreur: impossible de déterminer le type de sortie GraphQL pour les paramètres".

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[]
}

new-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: {}
}

Comme vous pouvez le voir, j'ai défini un nouveau type UserSettings dans un fichier séparé (en suivant les meilleures pratiques de nest.js) et l'a alloué en tant que type dans le modèle User ainsi que dans la classe DTO du nouvel utilisateur. L'erreur est renvoyée pour le DTO class (PAS pour le modèle) et si je le change en quelque chose comme [String] au lieu de UserSettingsType, il compile.

Je ne sais pas si vous avez besoin du résolveur ou de la logique service/mangouste pour ce problème si je peux aussi bien sûr le poster!

7
carsten

A eu un problème similaire lors de la migration de express vers nestjs.

Après avoir lu le docs réalisé que le problème n'est pas les objets imbriqués, mais les importations incorrectes.

Tu devrais utiliser @nestjs/graphql importe au lieu de type-graphql.

PAR EXEMPLE.

// changes this
import { Field, ID, ObjectType } from 'type-graphql'
// to
import { Field, ID, ObjectType } from '@nestjs/graphql'

Il en va de même pour toute autre importation depuis type-graphql

1
T.Chmelevskij