对象数组 Apollo Server 并从 react 发布
Posted
技术标签:
【中文标题】对象数组 Apollo Server 并从 react 发布【英文标题】:Array of Objects Apollo Server and post from react 【发布时间】:2019-06-04 18:11:39 【问题描述】:所以我试图弄清楚如何将一组对象从 POST 请求传递到 AWS lambda 上的 apollo 服务器。
我已经检查过了,但这不是同一个问题 Array of objects convert into object of objects when I use Apollo
post 请求如下所示...
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
`
示例特价商品如下所示...
[ // 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 服务器文档,但不太明白我做错了什么?
请正如 Daniel 在 cmets 中提到的那样,虽然从技术上讲,给出的“重复”答案是正确的,但这里提供的信息质量更高,对面临问题的人有用(在我看来)
【问题讨论】:
这可能不是完全重复的,但是有很多这样的“输入到输出”和“输出到输入”的问题。这里只有两个(here 和 here)。正如这些线程中所述,您需要同时定义input
和 type
-- 前者用于参数,后者用于实际查询响应。
谢谢丹尼尔,让我读一读,我可能有点累了。
我在这里的评论是 Apollo-server 与这些答案有点不同,尽管我试图弄清楚如何应用逻辑,正如你所说的那样它可以工作,我只是了解它。
我可以建议不要关闭它,因为您的解释比下面的解释要好得多。
【参考方案1】:
您只能将输入类型用于输入 (GraphQLInputObjectType),将对象类型用于输出 (GraphQLObjectType)。您同时使用Specials
:作为ShoppingItem
中字段specials
的输出类型和突变参数specials
中的输入类型。为此,您需要两种类型。原因是输出类型(可以)具有解析器(在您的情况下,这实际上是从阿波罗服务器抽象出来的)。您必须创建两种不同的类型:
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
【讨论】:
我真是个白痴,在上面的 cmets Daniel 之后,我真的很生气,给我两个滴答声,让我测试一下。谢谢。 对不起,我认为丹尼尔的反应很好,指向了正确的方向。发帖后才看到:( 所以我得到了预期的 SpecialsDraft 有对象,一秒钟只是检查我的代码。 好的,所以查询通过了(这是在 api 中记录事件主体:"\"query\":\"mutation saveNewItem(description:\\\"Something\\\ ",特价:[\\\"说明\\\\":\\\\"咕\\\\",\\"数量\\\\":\\\\"1\\\\",\\\\"价格\\\":\\\"1\\\",\\\"已保存\\\":false])name\"" 这给出了预期的名称找到字符串描述。我现在将其标记为正确,因为您已经回答了我提出的问题,非常感谢!以上是关于对象数组 Apollo Server 并从 react 发布的主要内容,如果未能解决你的问题,请参考以下文章
使用 ExpressJS 访问 Apollo Server 中的 Request 对象
预期 0 个参数,但得到 1 个。使用 typescript 并从 react-apollo 撰写