我对GraphQL还是很陌生,所以我有点努力地了解如何在前端编写适当的查询。
所以,这是我在服务器端进行的更改
type Mutation {
addTerminal(terminal: TerminalInput): Terminal
// other stuff not related
}
type Terminal {
terminalId: String!
merchantId: String
terminalDesignator: String
}
input TerminalInput {
terminalId: String!
merchantId: String
terminalDesignator: String
}
我相信它使用的是正确的结构,但是当我尝试与客户端连接时,我有点困惑。
这是我在前端进行的查询。
export const ADD_TERMINAL_MUTATION = () => (
mutation addTerminalMutation($terminalId: TerminalInput) {
addTerminal(terminal: { terminalId: $terminalId }) {
terminalId,
merchantId,
terminalDesignator,
}
}
);
当我将其发射到服务器时,会收到以下反馈:
在期望类型为“ String!”的位置中使用的类型为“ TerminalInput”的变量“ $ terminalId”。
所以我改为:
addTerminal(terminal: { terminalId: "123" }) {
出现错误
变量“ $ terminalId”从未在操作“ addTerminalMutation”中使用。
如果我更改为
mutation addTerminalMutation($terminalId: String!) {
它说没有提供TerminalId,但是如果我将其登录,则可以看到
那么,写这个的正确方法是什么?
谢谢。
答案 0 :(得分:0)
您需要将addTerminalMutation($terminalId: TerminalInput)
更改为addTerminalMutation($terminalId: String!)
,以指示正确的类型。
答案 1 :(得分:0)
首先,
Variable "$terminalId" is never used in operation "addTerminalMutation".
是因为在行中传递了变量
mutation addTerminalMutation($terminalId: TerminalInput)
,以后再也不会引用它。
第二部分中的问题似乎是terminalId参数未分解。 该行中的参数
addTerminal(terminal: { terminalId: $terminalId })
应该是字符串!。
您可以执行以下操作:
addTerminal(input: $terminalId)
传递整个终端ID对象。
请参阅此以获取更多信息: https://blog.apollographql.com/designing-graphql-mutations-e09de826ed97