提交包含 "aws-amplify" 对象播放负载嵌套数组的 graphql 突变
Submit graphql mutation containing nested array of object playload with "aws-amplify"
我尝试使用 aws-amplify:
提交以下有效负载(嵌套对象数组)
{
"data": [
{ "name": "alpha", "description": "lorem" },
{ "name": "bravo", "description": "ipsum" },
]
}
本方案(源码为TypeScript):
import AWSAmplifyAPI, { graphqlOperation } from "@aws-amplify/api";
const rawGraphQLRequest: string = `
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: [$data])
}`;
type Item = {
name: string;
description: string;
}
async function registerMultipleItems(items: Array<Item>): Promise<void> {
await AWSAmplifyAPI.graphql(graphqlOperation(rawGraphQLRequest, { data: items }));
}
导致不明确的错误:
Validation error of type VariableTypeMismatch: Variable type '[registerMultipleItemsInput]!' doesn't match expected
type 'registerMultipleItemsInput' @ 'registerMultipleItems'";
为后端,scheme定义为:
registerMultipleItems(data: [registerMultipleItemsInput]!): [String]!
@aws_cognito_user_pools
input registerMultipleItemsInput{
name: String!
description: String!
}
我尝试将 registerMultipleItemsInput
定义添加到 rawGraphQLRequest
:
const rawGraphQLRequest: string = `
input registerMultipleItemsInput {
name: String!
description: String!
}
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: [$data])
}`;
存在以上错误,并发生其他错误:
Validation error of type NonExecutableDefinition: The registerMultipleItemsInput definition is not executable.
{ "data": <Array>
} 有效负载的正确语法是什么?
P. S. 我希望我不需要在 rawGraphQLRequest
中定义 registerMultipleItemsInput
,因为 registerMultipleItemsInput
已经在后端定义并且在前端再次定义它是某种硬编码。
我认为你的第一个解决方案是正确的,除了:
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: [$data]) // <-------- incorrect
}`;
$data
已经包含一个 registerMultipleItemsInput
的数组,但是你将它包装在另一个不正确的数组中,它必须是:
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: $data) // <-------- correct
}`;
我尝试使用 aws-amplify:
提交以下有效负载(嵌套对象数组){
"data": [
{ "name": "alpha", "description": "lorem" },
{ "name": "bravo", "description": "ipsum" },
]
}
本方案(源码为TypeScript):
import AWSAmplifyAPI, { graphqlOperation } from "@aws-amplify/api";
const rawGraphQLRequest: string = `
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: [$data])
}`;
type Item = {
name: string;
description: string;
}
async function registerMultipleItems(items: Array<Item>): Promise<void> {
await AWSAmplifyAPI.graphql(graphqlOperation(rawGraphQLRequest, { data: items }));
}
导致不明确的错误:
Validation error of type VariableTypeMismatch: Variable type '[registerMultipleItemsInput]!' doesn't match expected
type 'registerMultipleItemsInput' @ 'registerMultipleItems'";
为后端,scheme定义为:
registerMultipleItems(data: [registerMultipleItemsInput]!): [String]!
@aws_cognito_user_pools
input registerMultipleItemsInput{
name: String!
description: String!
}
我尝试将 registerMultipleItemsInput
定义添加到 rawGraphQLRequest
:
const rawGraphQLRequest: string = `
input registerMultipleItemsInput {
name: String!
description: String!
}
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: [$data])
}`;
存在以上错误,并发生其他错误:
Validation error of type NonExecutableDefinition: The registerMultipleItemsInput definition is not executable.
{ "data": <Array>
} 有效负载的正确语法是什么?
P. S. 我希望我不需要在 rawGraphQLRequest
中定义 registerMultipleItemsInput
,因为 registerMultipleItemsInput
已经在后端定义并且在前端再次定义它是某种硬编码。
我认为你的第一个解决方案是正确的,除了:
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: [$data]) // <-------- incorrect
}`;
$data
已经包含一个 registerMultipleItemsInput
的数组,但是你将它包装在另一个不正确的数组中,它必须是:
mutation ($data: [registerMultipleItemsInput]!) {
registerMultipleItems(data: $data) // <-------- correct
}`;