【问题标题】:Apollo Client: Variable is not defined. Received status code 400Apollo 客户端:未定义变量。收到状态码 400
【发布时间】:2019-06-17 04:22:38
【问题描述】:

我正在尝试使用 Apollo 客户端在 GraphQL 查询中使用动态变量。我已按照文档进行操作,但 Apollo 一直给我错误,说我的变量未定义,并最终以状态码 400 响应。

这是 Apollo 的文档所说的:

mutate: (options?: MutationOptions) => 承诺 从您的 UI 触发突变的功能。您可以选择传递变量、optimisticResponse、refetchQueries 和 update 作为选项,这将覆盖传递给 Mutation 组件的任何道具。该函数返回一个符合您的变异结果的承诺。

这是我尝试编写的代码:

const fetch = require('node-fetch');
const ApolloClient = require('apollo-boost').default;
const gql = require('graphql-tag');

const client = new ApolloClient({
    uri: "http://api.domain.com/graphql",
    fetch
});

run();

async function run() {
    try {
        const resp = await client.mutate({
            mutation: gql`mutation {
                trackPr(id: $id, pr: $pr, title: $title, body: $body, state: $state, merged: $merged) {
                    id
                }
            }`,
            variables: {
                id: 1,
                pr: 1,
                title: "test title",
                body: "test body",
                state: "test state",
                merged: false
            },
        });


        console.log(resp.data);
    } catch(ex) {
        console.log(ex);
    }
}

然后我会收到每个变量的错误消息,说明它尚未定义:

[GraphQL 错误]:消息:变量“$id”未定义。,位置:[object Object],[object Object],路径:未定义

在每条错误消息之后,我都会收到一条状态码为 400 的最终消息:

[网络错误]:ServerError:响应不成功:收到状态码400

没有直接在突变中设置的变量和所有值,突变本身运行良好,但我不知道为什么它认为变量没有定义。

【问题讨论】:

标签: node.js graphql apollo-client


【解决方案1】:

操作中使用的任何变量都必须声明为操作定义的一部分,如下所示:

mutation SomeOptionalMutationName ($id: ID!) {
  trackPr(id: $id) {
    id
  }
}

这使 GraphQL 可以根据提供的类型验证您的变量,并验证变量是否正在用于代替正确的输入。

【讨论】:

  • 嗨!遇到同样的问题,只是一遍又一遍地检查该声明,但我无法注意到错误在哪里。我使用来自 react js 的 apollo 客户端调用我的 graphql 突变,发送请求时,数据包包含正确的有效负载和正确的变量,我的突变对象包含相应的 args 但响应始终是这个 {"errors":[{"message":" isEnable 未定义","locations": [{"line": 2,"column": 3}],"path": ["addItem"]}],"data": {"addItem": null}}
猜你喜欢
  • 2019-05-05
  • 2021-10-01
  • 2018-08-21
  • 2022-12-20
  • 1970-01-01
  • 2020-01-23
  • 2017-05-01
  • 2023-04-02
相关资源
最近更新 更多