Javascript GraphQL Args错误:参数类型必须是输入类型,但获取:函数GraphQLObjectType(配置){
在服务器启动(Javascript GraphQL Args错误:参数类型必须是输入类型,但获取:函数GraphQLObjectType(配置){,javascript,node.js,graphql,Javascript,Node.js,Graphql,在服务器启动(node index.js)时,我的GraphQL NodeJS服务器出现以下错误: 错误:查询。付款(数据:)参数类型必须为输入类型,但已获取: 函数图HQLObjectType(配置){ _classCallCheck(this,GraphQLObjectType) 当我从字符串更改原始参数时发生此错误 args: { data: { type: graphQL.GraphQLString } }, 要创建对象类型,请执
node index.js
)时,我的GraphQL NodeJS服务器出现以下错误:
错误:查询。付款(数据:)参数类型必须为输入类型,但已获取:
函数图HQLObjectType(配置){
_classCallCheck(this,GraphQLObjectType)
当我从字符串更改原始参数时发生此错误
args: {
data: { type: graphQL.GraphQLString }
},
要创建对象类型,请执行以下操作:
args: {
data: { type: graphQL.GraphQLObjectType }
},
我需要一个对象类型,因为我需要发送几个字段作为参数
GraphQL服务器:
var Query = new graphQL.GraphQLObjectType({
name: 'Query',
fields: {
payment: {
type: graphQL.GraphQLString,
args: {
data: { type: graphQL.GraphQLObjectType }
},
resolve: function (_, args) {
// There will be more data here,
// but ultimately I want to return a string
return 'success!';
}
}
}
});
我如何允许它接受一个对象
前端(如果需要,但在我发送此邮件之前就发生了错误):
如果您想使用Object作为参数,那么应该使用
GraphQLInputObjectType
而不是GraphQLObjectType
。请记住,GraphQL是基于强类型的,因此不允许使用泛型GraphQLObjectType
作为参数类型,然后动态查询参数。您必须明确定义所有可能的此输入对象中的IELD(并选择其中哪些是必填项,哪些不是)
尝试使用以下方法:
// your arg input object
var inputType = new GraphQLInputObjectType({
name: 'paymentInput',
fields: {
user: {
type: new GraphQLNonNull(GraphQLString)
},
order: {
type: GraphQLString
},
...another fields
}
});
var Query = new graphQL.GraphQLObjectType({
name: 'Query',
fields: {
payment: {
type: graphQL.GraphQLString,
args: {
data: { type: new GraphQLNonNull(inputType) }
},
resolve: function (_, args) {
// There will be more data here,
// but ultimately I want to return a string
return 'success!';
}
}
}
});
谢谢Dave勋爵。我最后把它改成了一个
mutation
并指定了字段。顺便说一句,还有两个问题:1)
有没有比encodeURIComponent(“{payment(data:{user:{test}”)更好的方法来编写我的POST查询
?如果对象很大,手动指定每个字段会变得很麻烦。2)GraphQL似乎需要一个查询
,即使我只需要一个变异
。我需要一直有一个查询还是在某个地方有一个选项?1)
我想你是在使用jquery ajax调用GraphQL根据你给出的例子。不幸的是,我不能帮你,因为在我的项目中,我在ReactJS
前端使用了一个Relay
,它负责这一点。2)
显然,Query
在模式中总是必需的。看看graphql-js
源代码,我希望我在至少感谢你!!!这篇文章发表已经两年了,文档仍然没有说清楚。在看到这篇文章之前,我浪费了整整一天的时间。谢谢@lorddave!
// your arg input object
var inputType = new GraphQLInputObjectType({
name: 'paymentInput',
fields: {
user: {
type: new GraphQLNonNull(GraphQLString)
},
order: {
type: GraphQLString
},
...another fields
}
});
var Query = new graphQL.GraphQLObjectType({
name: 'Query',
fields: {
payment: {
type: graphQL.GraphQLString,
args: {
data: { type: new GraphQLNonNull(inputType) }
},
resolve: function (_, args) {
// There will be more data here,
// but ultimately I want to return a string
return 'success!';
}
}
}
});