![](/img/trans.png)
[英]Passing input value to my graphql mutation - react/react-apollo
[英]Object as input variable in mutation: GraphQL - Apollo - React
我在兩個單獨的存儲庫中有一個 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);
}
}
但是在嘗試創建揚聲器時出現以下錯誤:
Uncaught (in promise) Invariant Violation:查詢中不允許架構類型定義。 找到:“InputObjectTypeDefinition”
任何建議/想法如何做到這一點?
在向 GraphQL 服務發送請求時,您不能定義其他類型,也不需要——只需使用您已經在服務器上定義的類型(在本例中為ExpertiseInput
:
$expertise: ExpertiseInput!
但是,一開始就沒有必要使用這么多變量:
mutation CreateSpeaker($input: SpeakerInput!) {
createSpeaker(speakerInput: $input) {
name
age
nationality
avatar
expertise {
title
domain
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.