在下面,我有一个query
requestString
和一个mutation
requestString
。
两个查询都运行,并且我正在记录两个resolve
方法。
问题:
如何从{name: 'Thomas'}
的variableValues
处理程序访问resolve
mutation
?
由于某种原因,传递给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' } } }
最佳答案
看来Node环境或您的执行上下文正在提供一个arguments
对象,该对象不表示您的resolve
方法的参数。
如果使用命名参数,则可以正常工作:
resolve: function(source, args, context, info) {
// all arguments have the correct values
}
关于javascript - 如何从GraphQL突变访问variableValues?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38469108/