graphql - 将变量传递给具有复杂输入类型的查询
问题描述
根据 graphQl 文档:
当您在代码中传递参数时,通常最好避免自己构建整个查询字符串。相反,您可以使用 $ 语法在查询中定义变量,并将变量作为单独的映射传递。
https://graphql.org/graphql-js/passing-arguments/
在这种情况下,我正在尝试查询以下架构:
const typeDefs = "
input OrderInputData {
date: String!
time: String!
frequency: String!
extras: [Int!]
mailAlarm: String
phoneAlarm: String
rating: Float
comments: String
}
type Mutation {
updateIntent(
paymentIntentId: String,
setupIntentId: String,
pairIntentId: String,
orderInput: OrderInputData): Boolean
}"
由于存在嵌套文档(OrderInputData),我在构建关于 graphQl 更好实践的查询时遇到了一些困难,因为这种情况比文档中描述的情况更复杂。这是我所知道的:
const dummyData = {
date: "11/11/2020",
frequency: "One time",
time: "6:17 PM",
mailAlarm: "teste",
phoneAlarm: "teste",
extras: [1, 3, 7],
};
const graphqlQuery = {
query: `
mutation updateIntent (
$paymentIntentId: String,
$pairIntentId: String,
$orderInput: {
date: String!,
time: String!,
frequency: String!,
extras: [Int!],
mailAlarm: String,
phoneAlarm: String
}) {
updateIntent (
paymentIntentId: $paymentIntentId,
pairIntentId: $pairIntentId,
orderInput: {
date: $date,
time: $time,
frequency: $frequency,
extras: $extras,
mailAlarm: $mailAlarm,
phoneAlarm: $phoneAlarm
})
}`,
variables: {
paymentIntentId: paymentIntentId,
pairIntentId: setupIntentId,
"orderInput.date": dummyData.date,
"orderInput.time": dummyData.time,
"orderInput.frequency": dummyData.frequency,
"orderInput.extras": dummyData.extras,
"orderInput.mailAlarm": dummyData.mailAlarm,
"orderInput.phoneAlarm": dummyData.phoneAlarm
}
我的错误是什么?
解决方案
通常,为 [API, BE] 突变规范中定义的任何复杂输入类型准备 [并作为变量传递] 对象。
variables: {
paymentIntentId: paymentIntentId,
pairIntentId: setupIntentId,
orderInput: { date: orderInput.date,
...
...或者在这种情况下(orderInput
前面定义)只是
orderInput: orderInput
...或者当然(如果名称匹配)只是:
variables: {
paymentIntentId: paymentIntentId,
pairIntentId: setupIntentId,
orderInput,
...
在查询/突变中:
$orderInput: OrderInputData
其次是
orderInput: $orderInput`
推荐阅读
- r - 函数适用于数据框,但使用 lapply 时出错
- c++ - OpenGL更新缓冲区如何影响速度
- r - 带有文件路径字符列表的 R for 循环仅在第一个文件上运行
- asp.net - 问题,如何查询数据库以按流派 id 浏览专辑?
- django - /accounts/register/get_success_url() 处的 Django 注册类型错误缺少 1 个必需的位置参数:“用户”
- python - 将具有 4 个参数的函数应用于 groupby 对象
- arrays - 来自对象的数组 - Angular 8 / Ionic
- git - 合并两个版本的 bpmn (xml) 文件
- python - 如何加载和运行 TensorFlow 模型
- r - 计算 R 中数据框中具有 1 和 0 的列的行总和,想要 0 之间的连续 1 之间的总和