Javascript 如何从GraphQL中访问变量值?

Javascript 如何从GraphQL中访问变量值?,javascript,node.js,graphql,graphql-js,Javascript,Node.js,Graphql,Graphql Js,下面是一个查询请求字符串和一个变异请求字符串 这两个查询都会运行,我正在记录这两个resolve方法 问题: 如何从resolve处理程序中访问{name:'Thomas'}变异的变量值 出于某种原因,传递到变异的resolve处理程序的第二个参数是require本身。为什么呢 代码: import Promise from 'bluebird' import axios from 'axios' import { graphql, GraphQLSchema, GraphQLObj

下面是一个
查询
请求字符串
和一个
变异
请求字符串

这两个查询都会运行,我正在记录这两个
resolve
方法

问题:

  • 如何从
    resolve
    处理程序中访问
    {name:'Thomas'}
    变异的
    变量值
  • 出于某种原因,传递到变异的
    resolve
    处理程序的第二个参数是
    require
    本身。为什么呢
  • 代码:

    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)
    
    })
    
    结果:

    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' } } }
    

    节点环境或您的执行上下文似乎提供了一个
    arguments
    对象,该对象不表示
    resolve
    方法的参数

    如果使用命名参数,则效果很好:

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