我正在尝试使用 Apollo 客户端在 GraphQL 查询中使用动态变量。我已遵循文档,但 Apollo 不断给我错误,说我的变量未定义,并最终以状态代码 400 进行响应。
Apollo 的文档是这样说的:
mutate: (选项?: MutationOptions) => Promise
一个从 UI 触发突变的函数。您可以选择传递变量、optimisticResponse、refetchQueries 和 update 作为选项,这将覆盖传递给 Mutation 组件的任何 props。该函数返回一个满足您的突变结果的承诺。
这是我尝试编写的代码:
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 的最终消息:
[网络错误]:ServerError:响应不成功:收到状态代码400
突变本身在没有变量和直接在突变中设置的所有值的情况下运行良好,但我不知道为什么它认为变量未定义。