Отправить мутацию graphql, содержащую вложенный массив объекта playload с «aws -amplify» - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь передать ниже полезную нагрузку (вложенный массив объектов), используя 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'";

Бэкэнд, схема определяется как:

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>} полезной нагрузки?

PS Надеюсь, мне не нужно определить registerMultipleItemsInput в rawGraphQLRequest, потому что registerMultipleItemsInput уже был определен в бэкэнде, и определение его снова в веб-интерфейсе является своего рода жестким кодированием.

1 Ответ

1 голос
/ 04 марта 2020

Я думаю, что ваше первое решение правильное, за исключением:

mutation ($data: [registerMultipleItemsInput]!) {
    registerMultipleItems(data: [$data]) // <-------- incorrect
}`;

$data уже содержит массив registerMultipleItemsInput, но вы обернули его в другой массив, который является неправильным, это должно быть:

mutation ($data: [registerMultipleItemsInput]!) {
    registerMultipleItems(data: $data) // <-------- correct
}`;
...