在反应本机应用程序中使用 AWS Amplify 在 GraphQL 突变中出错

Posted

技术标签:

【中文标题】在反应本机应用程序中使用 AWS Amplify 在 GraphQL 突变中出错【英文标题】:Getting Error in GraphQL Mutation using AWS Amplify in react native app 【发布时间】:2019-03-18 12:07:09 【问题描述】:

尝试执行 graphql 突变,其中突变应采用自定义类型。在 App Sync 架构中,我定义了这些自定义类型:

架构:

  input CreateConversationInput 
        user: UserInput
        doctor: DoctorInput
        questionsAndAnsers: [ConversationQAInput]
        pet: UpdatePetInput
    

反应原生代码:

  const createConversationInput = 

        user: 
            username: "deep",
            userType: "Patient",
            fullName: "Deep A"
        ,
        doctor: 
            name: "Raman",
            speciality: "dog",
            doctorId: "0bd9855e-a3f2-4616-8132-aed490973bf7"
        ,
        questionsAndAnswers: [ question: "Question 1", answer: "Answer 1" ,  question: "Question 2", answer: "Answer 2" ],
        pet:  username: "deep39303903", petId: "238280340932", category: "Canine" 


    

    API.graphql(graphqlOperation(CreateConversation, createConversationInput)).then(response => 

        console.log(response);

    ).catch(err => 
        console.log(err);
    );

我已经定义了这样的突变:

export const CreateConversation = `mutation CreateConversation( $user: Object, 
    $doctor: Object, $questionsAndAnswers: Object, $pet: Object ) 

        createConversation(

             input : 

                user: $user
                doctor: $doctor
                questionsAndAnswers: $questionsAndAnswers
                pet: $pet
            
        )
    username
    createdAt

  

  `;

突变在 AWS GraphQL 控制台中正常工作。但是,在反应本机应用程序中,我收到错误。

错误:

“UnknownType 类型验证错误:未知类型 Object”。

我认为错误是因为我将类型定义为突变中的 Object,而不是 AWS Schema 中定义的实际类型。如果这是问题,我如何在 React Native 代码中定义自定义类型?

【问题讨论】:

【参考方案1】:

您只需要更改定义变量的方式:

mutation CreateConversation(
  $user: UserInput,
  $doctor: DoctorInput,
  $questionsAndAnswers: [ConversationQAInput],
  $pet: UpdatePetInput
) 
  createConversation(input: 
    user: $user
    doctor: $doctor
    questionsAndAnswers: $questionsAndAnswers
    pet: $pet
  ) 
    username
    createdAt
  

在 GraphQL 中使用变量时,您需要为该变量指定输入类型(或标量)。然后将其与您使用该变量的任何参数所期望的类型进行比较。这里的输入类型是指你的 schema 中的一种类型,和 JS 无关,所以你的代码中不需要任何特殊的东西。

【讨论】:

谢谢。将对象类型更改为架构中定义的类型后,它可以正常工作。

以上是关于在反应本机应用程序中使用 AWS Amplify 在 GraphQL 突变中出错的主要内容,如果未能解决你的问题,请参考以下文章

如何将 React 本机导航与 Android 中的 AWS Amplify 推送通知集成?

Haste 模块命名冲突:将本机应用程序与 AWS 服务反应(放大项目)

访问 aws amplify 订阅中的最新状态值反应

在 React js 中使用现有的 aws amplify 项目

Aws Amplify 在一个 GraphQL Api 中使用多个 Cognito 用户池

aws-amplify-react Connect 首先返回未定义的数据