Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GraphQL Args错误:参数类型必须是输入类型,但获取:函数GraphQLObjectType(配置){_Javascript_Node.js_Graphql - Fatal编程技术网

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!';
            }
        }
    }
});