Node.js Apollo客户端:未定义变量。收到状态代码400

Node.js Apollo客户端:未定义变量。收到状态代码400,node.js,graphql,apollo-client,Node.js,Graphql,Apollo Client,我正在尝试使用Apollo客户端在GraphQL查询中使用动态变量。我遵循了文档,但Apollo不断给我错误,说我的变量没有定义,最终以状态代码400响应 以下是阿波罗的文件所说的: 变异:(选项?:变异选项)=>承诺 从用户界面触发变异的函数。您可以选择将变量、optimisticResponse、refetchQueries和update in作为选项传递,这将覆盖传递给突变组件的任何道具。该函数返回一个满足您的变异结果的承诺 下面是我试图编写的代码: const fetch = requi

我正在尝试使用Apollo客户端在GraphQL查询中使用动态变量。我遵循了文档,但Apollo不断给我错误,说我的变量没有定义,最终以状态代码400响应

以下是阿波罗的文件所说的:

变异:(选项?:变异选项)=>承诺 从用户界面触发变异的函数。您可以选择将变量、optimisticResponse、refetchQueries和update in作为选项传递,这将覆盖传递给突变组件的任何道具。该函数返回一个满足您的变异结果的承诺

下面是我试图编写的代码:

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”,位置:[对象对象],[对象对象],路径:未定义

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

[网络错误]:服务器错误:响应未成功:收到状态代码400


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

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

mutation SomeOptionalMutationName ($id: ID!) {
  trackPr(id: $id) {
    id
  }
}
这允许GraphQL根据提供的类型验证您的变量,还可以验证这些变量是否被用来代替正确的输入