2016-07-19 3 views
0

Unten habe ich eine queryrequestString und eine mutationrequestString.Wie greife ich auf variableValues ​​aus GraphQL-Mutation zu?

Beide Abfragen werden ausgeführt, und ich protokolliere beide Methoden resolve.

Fragen:

  1. Wie greife ich {name: 'Thomas'} die variableValues vom resolve Handler für das mutation?
  2. Aus irgendeinem Grund ging das zweite Argument in die resolve Handler für die Mutation ist require selbst. Warum das?

Code:

import Promise from 'bluebird' 
import axios from 'axios' 
import { 
    graphql, 
    GraphQLSchema, 
    GraphQLObjectType, 
    GraphQLString 
} from 'graphql' 

var userType = new GraphQLObjectType({ 
    name: 'User', 
    fields: { 
    id: { type: GraphQLString }, 
    name: { type: GraphQLString }, 
    } 
}); 

var schema = new GraphQLSchema({ 
    query: new GraphQLObjectType({ 
    name: 'Query', 
    fields: { 
     user: { 
     type: userType, 
     args: { 
      id: { type: GraphQLString } 
     }, 
     resolve: function() { 
      console.log(arguments) 
      return Promise.resolve({"name": 'meow'}) 
     } 
     } 
    } 
    }), 
    mutation: new GraphQLObjectType({ 
    name: 'Mutation', 
    fields: { 
     createUser: { 
     type: userType, 
     args: { 
      name: { 
      name: 'name', 
      type: GraphQLString 
      } 
     }, 
     resolve:() => { 
      console.log(arguments) 
      return Promise.resolve({"name": 'meow'}) 
     } 
     } 
    } 
    }) 
}) 

var mutationRequest = ` 
mutation basic($name: String!) { 
    createUser(name: $name) { 
    name 
    } 
} 
` 

graphql(schema, mutationRequest, null, null, {name: 'Thomas'}).then(result => { 

    console.log(result) 

}) 

var queryRequest = ` 
query basic($id: String!) { 
    user(id: $id) { 
    name 
    } 
} 
` 

graphql(schema, queryRequest, null, null, {id: '1'}).then(result => { 

    console.log(result) 

}) 

Ergebnisse:

[email protected]:super-octopus$ babel-node graphql-test.js 
{ '0': null, 
    '1': { id: '1' }, 
    '2': null, 
    '3': 
    { fieldName: 'user', 
    fieldASTs: [ [Object] ], 
    returnType: 
     GraphQLObjectType { 
     name: 'User', 
     description: undefined, 
     isTypeOf: undefined, 
     _typeConfig: [Object], 
     _interfaces: [], 
     _fields: [Object] }, 
    parentType: 
     GraphQLObjectType { 
     name: 'Query', 
     description: undefined, 
     isTypeOf: undefined, 
     _typeConfig: [Object], 
     _interfaces: [], 
     _fields: [Object] }, 
    path: [ 'user' ], 
    schema: 
     GraphQLSchema { 
     _queryType: [Object], 
     _mutationType: [Object], 
     _subscriptionType: undefined, 
     _directives: [Object], 
     _typeMap: [Object], 
     _implementations: {} }, 
    fragments: {}, 
    rootValue: null, 
    operation: 
     { kind: 'OperationDefinition', 
     operation: 'query', 
     name: [Object], 
     variableDefinitions: [Object], 
     directives: [], 
     selectionSet: [Object], 
     loc: [Object] }, 
    variableValues: { id: '1' } } } 
{ '0': {}, 
    '1': 
    { [Function: require] 
    resolve: [Function: resolve], 
    main: 
     Module { 
     id: '.', 
     exports: {}, 
     parent: null, 
     filename: '/Users/thomasreggi/Desktop/super-octopus/graphql-test.js', 
     loaded: true, 
     children: [Object], 
     paths: [Object] }, 
    extensions: 
     { '.js': [Function], 
     '.json': [Function], 
     '.node': [Function], 
     '.jsx': [Function], 
     '.es6': [Function], 
     '.es': [Function] }, 
    cache: {...requireCache} 
    } 
    '2': 
    Module { 
    id: '.', 
    exports: {}, 
    parent: null, 
    filename: '/Users/thomasreggi/Desktop/super-octopus/graphql-test.js', 
    loaded: true, 
    children: [ [Object], [Object], [Object] ], 
    paths: 
     [ '/Users/thomasreggi/Desktop/super-octopus/node_modules', 
     '/Users/thomasreggi/Desktop/node_modules', 
     '/Users/thomasreggi/node_modules', 
     '/Users/node_modules' ] }, 
    '3': '/Users/thomasreggi/Desktop/super-octopus/graphql-test.js', 
    '4': '/Users/thomasreggi/Desktop/super-octopus' } 
{ data: { createUser: { name: 'meow' } } } 
{ data: { user: { name: 'meow' } } } 

Antwort

1

Es sieht aus wie die Node-Umgebung oder Ihren Ausführungskontext ist ein arguments Objekt bereitstellt, die nicht die Argumente Ihrer resolve vertreten ist Methode.

Wenn Sie benannte Argumente es ganz gut funktioniert:

resolve: function(source, args, context, info) { 
    // all arguments have the correct values 
} 
Verwandte Themen