1

Below I have a query requestString and a mutation requestString.

Both queries are run and I'm logging both of the resolve methods.

Questions:

  1. How do I access {name: 'Thomas'} the variableValues from the resolve handler for the mutation?
  2. For some reason the second argument passed into the resolve hander for the mutation is require itself. Why is that?

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)

})

Results:

thomasreggi@zx: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' } } }

1 Answer 1

2

It looks like the Node environment, or your execution context, is providing an arguments object that does not represent the arguments of your resolve method.

If you use named arguments it works just fine:

resolve: function(source, args, context, info) {
  // all arguments have the correct values
}
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.