Je constate un comportement vraiment inhabituel dans un projet de type graphql.
J'ai suivi la documentation ici https://typegraphql.com/docs/resolvers.html pour lier un peu de GQL dans une fonction JS, mais l'objet est simplement vide lorsqu'il entre dans la fonction. Je ne sais vraiment pas pourquoi il fait cela.
Étant donné cette classe de type:
{ bar: undefined, baz: undefined, buzz: undefined }
Et cette fonction de requête:
{ foos( bar:true, baz:1, buzz:2, ) { _key } }
3 Réponses :
me va bien, je l'ai testé et cela a très bien fonctionné, peut-être que c'est quelque chose lié à votre configuration de typeGraphql typescipt, il pourrait être utile de vérifier la documentation de configuration de TypeGraphql ts.
Un problème que j'ai remarqué et qui pourrait être lié est que lorsque j'utilise babel pour compiler un projet TypeGraphql, la déstructuration des objets dans @Args
et @Arg
ne fonctionnera pas correctement
alors peut-être que cela pourrait fonctionner à la place dans votre cas
@Query((returns) => Boolean, { name: 'foo' }) async getFoos(@Args() args: GetFoosArgs): Promise<boolean> { console.log(args); return true; }
La chose étrange est que graphql est strict et l'idée que votre résolveur a compilé avec succès, vous pouvez exécuter la requête sans erreur, mais vous obtenez cette sortie est un un peu déroutant donc je ne suis pas sûr si SO sera utile dans votre cas, du moins pas sans plus d'informations.
notez également que votre code publié contient des erreurs comme une requête utilisant foos code > quand il devrait être
toto
alors veuillez lire comment inclure MVCE dans votre question qui sera plus utile pour r autres pour déboguer le problème.
P.S. J'utilise TypeGraphql v0.17.6
Assurez-vous d'avoir installé le package babel-plugin-transform-typescript-metadata
via npm ( entrez la description du lien ici .
Vous pouvez en savoir plus sur les options du compilateur Babel + TypeScript ici .
Dans mon cas, les arguments ne sont jamais apparus dans mon schéma émis en premier lieu (j'ai vérifié via l'option emitSchemaFile
pour buildSchema
). Installer le plugin mentionné et l'ajouter à la section plugins
de mon .babelrc
a corrigé le problème.
Ok, je ne suis pas tout à fait sûr de la nature du problème, mais j'ai un peu changé les choses et la magie fonctionne maintenant.
La chose clé à noter est qu'avant, j'utilisais le Arg
décorateur de type-graphql
, et maintenant j'utilise le décorateur Args
de @ nestjs / graphql
. P >
Ancien code:
import { Resolver, Query, Parent, ResolveProperty, Mutation, Args, Context, } from '@nestjs/graphql'; @Query(_returns => [Intent], { name: 'intents' }) async getIntents( @Args({ name: 'getIntentsArgs', type: () => GetIntentsArgs }) getIntentsArgs: GetIntentsArgs, ): Promise<Intent[]> { return this.intentsService.getIntents(getIntentsArgs); } @InputType() export class GetIntentsArgs implements IGetIntentsArgs { @Field() @IsBoolean() @IsOptional() displayTest?: boolean = false; @Field() @IsNumberString() @IsOptional() skip?: number = 0; @Field() @IsNumberString() @IsOptional() take?: number = 100; @Field() @IsString() @IsOptional() sortColumn?: string = 'intent._key'; @Field() @IsString() @IsOptional() sortDirection?: string = 'asc'; @Field(_ => [Filter]) @Type(_ => Filter) @IsOptional() filters?: Filter[] = []; Filter[] = []; }
Nouveau code:
import { InputType, Field, Int, Arg, ID } from 'type-graphql'; @Query(_returns => [Intent], { name: 'intents' }) async getIntents( @Arg('getIntentsArgs', () => GetIntentsArgs, { nullable: true, defaultValue: {}, }) getIntentsArgs: GetIntentsArgs, ): Promise<Intent[]> { } @InputType() export class GetIntentsArgs implements IGetIntentsArgs { @Field(() => Boolean, { nullable: true, defaultValue: false }) displayTest?: boolean; @Field(() => Int, { nullable: true, defaultValue: 0 }) skip?: number; @Field(() => Int, { nullable: true, defaultValue: 100 }) take?: number; @Field(() => String, { nullable: true, defaultValue: 'intent._key' }) sortColumn?: string; @Field(() => String, { nullable: true, defaultValue: 'asc' }) sortDirection?: string; @Field(() => [Filter], { nullable: true, defaultValue: [] }) filters?: IFilter[]; }
Utilisez-vous également par hasard des modules GraphQL?