2017-12-28 5 views
0

Ich verwende "graphql-tools". Nach dem Empfang der graphql-Abfrage sucht ElasticSearch und gibt Daten zurück.Gibt es ein Tool zum Analysieren von graphql-query, um angeforderte Felder zu erhalten?

Aber in der Regel Anfragen nur wenige Felder, nicht alle. Ich möchte nur die angeforderten Felder an ElasticSearch übergeben. Zuerst muss ich die angeforderten Felder abrufen.

Zum Beispiel in dem Resolver,

const resolvers = { 
    Query: { 
      async user(p, args, context) 
      { 
      //can print query as following 
      console.log(context.query)     
      } 
     ..... 
     } 
} 

Er druckt als

  "query User { user(id:"111") { id name address } } 

Gibt es eine Bibliothek, die Teil so etwas wie dieses

  { id:"", name:"", address:"" } 

zu erhalten, bevor es zu tun durch Ich möchte wissen, ob es etwas Nützliches gibt?

Antwort

1

In graphql-js zeigen Resolver ein viertes Argument namens resolve info. Dieses Feld enthält weitere Informationen zum Feld.

Vom GraphQL docsGraphQLObjectType Konfigurationsparametern Typdefinition:

// See below about resolver functions. 
type GraphQLFieldResolveFn = (
    source?: any, 
    args?: {[argName: string]: any}, 
    context?: any, 
    info?: GraphQLResolveInfo 
) => any 

type GraphQLResolveInfo = { 
    fieldName: string, 
    fieldNodes: Array<Field>, 
    returnType: GraphQLOutputType, 
    parentType: GraphQLCompositeType, 
    schema: GraphQLSchema, 
    fragments: { [fragmentName: string]: FragmentDefinition }, 
    rootValue: any, 
    operation: OperationDefinition, 
    variableValues: { [variableName: string]: any }, 
} 

Im fieldNodes Feld, das Sie für Ihren Bereich suchen und die selectionSet für das jeweilige Feld bekommen. Von hier wird es schwierig, da die selections normale Feldauswahl, Fragmente oder Inline-Fragmente sein können. Sie müssten alle zusammenführen, um alle Felder zu kennen, die in einem Feld ausgewählt sind.

+0

Ich habe solche Argumente nicht gesehen. Ich benutze "graphql-tools". – arslan

Verwandte Themen