簡體   English   中英

對象作為突變中的輸入變量:GraphQL - Apollo - React

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM