Итак, я пытаюсь понять, как передать массив объектов из запроса 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 и не совсем понимаю, что я делаю не так?
Пожалуйста, чтобы, как упоминал Даниэль в комментариях, хотя технически "повторяющийся" ответ верен, предлагаемая здесь информация гораздо более качественная и полезна для людей, столкнувшихся с проблемой (на мой взгляд)
Спасибо, Дэниел, дай мне почитать, возможно, я немного устал.
Мой комментарий здесь: Apollo-server немного отличается от этих ответов, хотя я пытаюсь понять, как применить логику, поскольку вы сказали, что это может сработать, я просто обдумываю это.
Могу я предложить не закрывать это, потому что ваше объяснение намного лучше, чем приведенное ниже.


Вы можете использовать только типы ввода для ввода (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
}
Я такой идиот, я буквально подумал, что после комментариев Дэниела выше, поставьте мне две отметки и позвольте мне проверить это. Спасибо.
Извините, я думаю, что ответ Дэниела отличный и указывает правильное направление. Увидел после публикации :(
Итак, я получаю ожидаемый объект SpecialsDraft, одна секунда просто проверяет мой код.
Итак, запрос проходит как (это регистрирует тело события в api: "{\" query \ ": \" mutation {saveNewItem (description: \\\ "Something \\\", specials: [{\\ \ "описание \\\": \\\ "Goo \\\", \\\ "кол-во \\\": \\\ "1 \\\", \\\ " цена \\\": \\\ "1 \\\", \\\ "сохранено \\\": false} ]) {name}} \ "}"
И это дает ожидаемое описание строки Name found. На данный момент я отмечу это как правильное, поскольку вы ответили на вопрос, который я задал, поэтому спасибо!
Возможно, это не точная копия, но есть несколько вопросов типа «ввод, где вывод» и «вывод, где ввод». Вот всего два (здесь и здесь). Как указано в этих потоках, вам необходимо определить как
input, так иtype- первый для аргументов, а второй для фактических ответов на запросы.