将复杂参数传递给GraphQL突变

时间:2017-04-25 06:27:47

标签: javascript node.js graphql

我一直在使用graphql-js在Node服务器中使用GraphQL,而GraphQL已经证明是一个非常有价值的抽象,但我遇到了一个问题。

我经常发现自己需要使用GraphQLInputObjectType将大型结构化对象作为GraphQL突变的参数传递。这没关系,但是GraphQL不支持使用JSON表示法:(。所以我最终只发送一个包含JSON的字符串,供服务器处理。

const objectStr = JSON.stringify(object).replace(new RegExp("\"", "g"), "'")

graphQLClient(`{
    user: updateUser(someDataObject: "${objectStr}") {...}
}`)

但是现在我从GraphQL中完全没有受益!

我有一种感觉,我在这里做错了什么。什么是GraphQL方式,例如,将注册表单数据发送到变异?

1 个答案:

答案 0 :(得分:3)

这样做的最佳方法是使用输入对象。

基本上你的请求看起来像是:

/* Query */
mutation Update($input: UpdateUserInput!) {
    updateUser(input: $input) {
        changedUser {
            id
            username
        }
    }
}

/* Variables (as JSON) */
{
    "input": {
        "username": "elon@spacex.com",
        "password": "SuperSecretPassword"
    }
}

您可以将其传递到POST请求中的有效负载的内容主体中,如下所示:

{
    "query": <GraphQL query from above as a string>,
    "variables": <JSON object from above>
}

如果您需要更深入的解释,可以查看Scaphold's Docs for updating data以帮助您构建API。

希望这有帮助!