Массив объектов Apollo Server и пост от реакции - PullRequest
0 голосов
/ 10 января 2019

Итак, я пытаюсь выяснить, как передать массив объектов из запроса POST на сервер apollo на AWS lambda.

Я проверил это, но это не та же проблема Массив объектов преобразуется в объект объектов, когда я использую Apollo

Запрос на публикацию выглядит следующим образом ...

    api.post('query', { query : `mutation {saveNewItem(description: "${description}", specials: ${JSON.stringify(specials)}){name}}`})
// comment to get rid of silly scroll bar overlapping code

Схема выглядит следующим образом ...

    const { gql } = require('apollo-server-lambda')

    const typeDefs = gql`
      type ShoppingItem {
        description: String
        specials: [Specials]
      }

      input Specials {
        description: String
        price: String
        qty: String
        saved: String
      }

  type Mutation {
    saveNewItem(description: String!, specials: [Specials]) : ShoppingItem
  }
`

пример Specials выглядит так ...

[{ // Object One
description: "First One"
price: "1.00"
qty: "1" 
saved: "false"
},{ // Object two
description: "Second One"
price: "1.00"
qty: "1" 
saved: "false"
}]

Ошибка, которую я получаю в настоящее время ...

'Error: The type of ShoppingItem.specials must be Output Type but got: [Specials].',
  'at assertValidSchema (/Users/me/Desktop/Projects/app/build/node_modules/graphql/type/validate.js:71:11)',

Если я изменяю его на обычный «тип», он жалуется, что он не является типом ввода.

Я также просматривал документацию по серверу apollo и не могу понять, что я делаю неправильно?

Пожалуйста, как отметил Даниэль в комментариях, хотя технически «дублированный» ответ является правильным, информация, предлагаемая здесь, гораздо более качественная и полезная для людей, сталкивающихся с проблемой (на мой взгляд)

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать только типы ввода для ввода (GraphQLInputObjectType) и типы объектов для вывода (GraphQLObjectType). Вы используете Specials как оба: как тип вывода для поля specials в ShoppingItem и как тип ввода в аргументе мутации specials. Для этого вам нужно два типа. Причиной этого является то, что выходные типы (могут) иметь средства распознавания (это фактически абстрагировано от сервера Apollo в вашем случае). Вам нужно будет создать два разных типа:

type ShoppingItem {
    description: String
    specials: [Specials]
}

type Specials {
    description: String
    price: String
    qty: String
    saved: String
}

input SpecialsDraft {
    description: String
    price: String
    qty: String
    saved: String
}

type Mutation {
    saveNewItem(description: String!, specials: [SpecialsDraft]) : ShoppingItem
}
...