这是突变:
const createNotebook = mutationWithClientMutationId ({
name: 'CreateNotebook',
inputFields: {
token: {
type: GraphQLString,
},
details: {
type: NotebookDetails,
},
},
outputFields: {
},
async mutateCRNotebook(input, context) {
const data = getJSONFromRelativeURL(input.token);
},
});
以下是变异详细信息字段中使用的模式:
const NotebookDetails = new GraphQLObjectType({
name: 'NotebookDetails',
interfaces: [nodeInterface],
fields: () => ({
id: globalIdField('NotebookDetails'),
description: {
type: GraphQLString,
description: '...',
resolve(obj) {
return obj.description;
},
},
language: {
type: GraphQLString,
description: '...',
resolve(obj) {
return obj.language;
},
},
}),
});
错误我开始运行此代码是:
api_1 | Error: CreateNotebookInput.details field type must be Input Type but got: NotebookDetails.
api_1 | at invariant (/usr/src/app/node_modules/graphql/jsutils/invariant.js:19:11)
api_1 | at /usr/src/app/node_modules/graphql/type/definition.js:698:58
api_1 | at Array.forEach (native)
api_1 | at GraphQLInputObjectType._defineFieldMap (/usr/src/app/node_modules/graphql/type/definition.js:693:16)
api_1 | at GraphQLInputObjectType.getFields (/usr/src/app/node_modules/graphql/type/definition.js:682:49)
api_1 | at typeMapReducer (/usr/src/app/node_modules/graphql/type/schema.js:224:26)
api_1 | at typeMapReducer (/usr/src/app/node_modules/graphql/type/schema.js:190:12)
api_1 | at Array.reduce (native)
api_1 | at /usr/src/app/node_modules/graphql/type/schema.js:217:36
api_1 | at Array.forEach (native)
api_1 | at typeMapReducer (/usr/src/app/node_modules/graphql/type/schema.js:210:27)
api_1 | at Array.reduce (native)
api_1 | at new GraphQLSchema (/usr/src/app/node_modules/graphql/type/schema.js:98:34)
api_1 | at Object.<anonymous> (/usr/src/app/src/schema/index.js:39:16)
api_1 | at Module._compile (module.js:569:30)
api_1 | at Object.Module._extensions..js (module.js:580:10)
我在查询中使用了这种语法,并且它们正常工作。但是,他们正在返回带有突变的错误。 我的代码中有什么不正确的,我该如何纠正?
答案 0 :(得分:18)
在GraphQL中,input
不能用作type
而type
不能用作input
。不幸的是,即使字段看起来与现有类型相同,您也必须定义一个单独的输入以用作参数。尝试这样的事情:
const NotebookDetailsInput = new GraphQLInputObjectType({
name: 'NotebookDetailsInput',
fields: () => ({
id: { type: GraphQLID },
description: { type: GraphQLString },
language: { type: GraphQLString },
})
});
如果使用SDL,相同的类型将如下所示:
input {
id: ID
description: String
language: String
}
请参阅this answer,了解为何这样做的详尽解释。
答案 1 :(得分:13)
对于那些使用"python.linting.enabled": false
并且在本帖子中发现的人,请参阅GraphQL网站上的here文档。
我使用graphQL工具的示例在下面 :(在graphql-tools
内的输入AKA和ImageInput
内输入
//变异文件
SocialPostInput
// Schedule和SocialPost文件
extend type Mutation {
SchedulePost (
socialPost: SocialPostInput,
schedule: ScheduleInput
): ScheduledPost
}`