将复杂的参数传递给 GraphQL 突变

fun*_*ial 6 javascript node.js graphql

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

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

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

graphQLClient(`{
    user: updateUser(someDataObject: "${objectStr}") {...}
}`)
Run Code Online (Sandbox Code Playgroud)

但是现在我根本没有从 GraphQL 中受益!

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

vin*_*nce 5

执行此操作的最佳方法是使用输入对象。

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

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

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

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

{
    "query": <GraphQL query from above as a string>,
    "variables": <JSON object from above>
}
Run Code Online (Sandbox Code Playgroud)

如果您想要更深入的解释,您可以查看Scaphold 的文档来更新数据,以帮助您构建 API。

希望这可以帮助!

  • 该解决方案缺少的部分是在何处以及如何定义 UpdateUserInput。 (14认同)