对象作为突变中的输入变量:GraphQL - Apollo - React
Posted
技术标签:
【中文标题】对象作为突变中的输入变量:GraphQL - Apollo - React【英文标题】:Object as input variable in mutation: GraphQL - Apollo - React 【发布时间】:2020-05-18 12:44:57 【问题描述】:我在两个独立的 repo 中有一个 React 客户端项目和一个 Node.js/GraphQL api。
在我的 React 应用程序中,我想将一个对象作为变量类型传递给我的突变。这是我的突变的样子:
export const CREATE_SPEAKER = gql`
input Expertise
title: String!
domain: String!
mutation CreateSpeaker(
$name: String!
$age: String!
$nationality: String!
$avatar: String!
$expertise: Expertise!
)
createSpeaker(
speakerInput:
name: $name
age: $age
nationality: $nationality
avatar: $avatar
expertise: $expertise
)
name
age
nationality
avatar
expertise
title
domain
`;
在我的 Node.js 项目中,我有以下架构:
input SpeakerInput
name: String!
age: String!
expertise: ExpertiseInput!
nationality: String!
avatar: String
input ExpertiseInput
title: String!
domain: String!
还有我的解析器:
createSpeaker: async args =>
const name, age, nationality, avatar, expertise = args.speakerInput;
const newSpeaker = new Speaker(
name,
age,
nationality,
avatar,
expertise:
title: expertise.title,
domain: expertise.domain
);
try
return await newSpeaker.save();
catch (error)
throw ("Failed to create speaker:: ", error);
但我在尝试创建扬声器时遇到以下错误:
未捕获(承诺)不变违规:架构类型定义不 允许在查询中。找到:“InputObjectTypeDefinition”
任何建议/想法如何做到这一点?
【问题讨论】:
【参考方案1】:在向 GraphQL 服务发送请求时,您无法定义其他类型,也不需要 - 只需使用您已经在服务器上定义的类型(在本例中为 ExpertiseInput
:
$expertise: ExpertiseInput!
但是,一开始就没有必要使用这么多变量:
mutation CreateSpeaker($input: SpeakerInput!)
createSpeaker(speakerInput: $input)
name
age
nationality
avatar
expertise
title
domain
【讨论】:
以上是关于对象作为突变中的输入变量:GraphQL - Apollo - React的主要内容,如果未能解决你的问题,请参考以下文章
应该如何对列表中的项目进行重新排序,并更新多个对象,如何使用 GraphQL 突变进行持久化?