【发布时间】: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