AWS Amplify 未生成正确的 graphql 输入深度

Posted

技术标签:

【中文标题】AWS Amplify 未生成正确的 graphql 输入深度【英文标题】:AWS Amplify not generating proper graphql input depth 【发布时间】:2019-10-07 05:50:07 【问题描述】:

我是 graphql 和 AWS Amplify 的新手,所以请原谅任何无知 :)

我有一个这样的 graphql 架构:

type Location @model @auth(rules: [allow: owner])
  street: String
  city: String
  state: String
  zip: String


type Trip @model @auth(rules: [allow: owner])
  id: String!
  ...
  location: Location

我正在尝试使用这样的突变请求同时创建位置和行程:

mutation 
  createTrip(input: 
      id: "someIdentifier",
      location: 
        street: "somewhere"
      
  ) 
      id
      location 
        street
      
  

但我收到这样的错误:


  "data": null,
  "errors": [
    
      "path": null,
      "locations": [
        
          "line": 2,
          "column": 21,
          "sourceName": null
        
      ],
      "message": "Validation error of type WrongType: argument 'input' with value '...' contains a field not in 'CreateTripInput': 'location' @ 'createTrip'"
    
  ]

查看生成的schema.graphql文件,发现输入模型上确实没有location对象:

input CreateTripInput 
  id: String!
  ...

如何让 amplify 生成正确的输入架构,以便我可以同时创建 Trip 和 location 对象?

【问题讨论】:

【参考方案1】:

我从 aws-amplify 团队 here 得到了答复。总结一下:

Trip 和 Location 都有 model 指令。没有 @connection 指令将 Trip 与 Location 连接起来。 “解决”这个问题的两个选项是:

如果您希望模型位于 2 个单独的表中并希望能够根据位置查询 Trip,请更新连接模型的架构。但是,使用 2 个单独的表,您将无法在单个突变中同时创建 Trip 和 Location。例如:

type Location @model @auth(rules: [allow: owner])
  street: String
  city: String
  state: String
  zip: String
  trips: Trip @connection(name:"TripLocation")


type Trip @model @auth(rules: [allow: owner])
  id: String!
  location: Location @connection(name:"TripLocation")

第二个选项,如果位置数据非常特定于旅行并且您不想创建单独的表,则从您的位置类型中删除 @model 指令。这样做可以让您创建 Location 作为相同突变的一部分。

type Location 
  street: String
  city: String
  state: String
  zip: String



type Trip @model @auth(rules: [allow: owner])
  id: String!
  location: Location

后者是我前进的解决方案。

【讨论】:

以上是关于AWS Amplify 未生成正确的 graphql 输入深度的主要内容,如果未能解决你的问题,请参考以下文章

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

AuthError - 错误:未正确配置 Amplify

Amplify add storage - 允许未经身份验证的用户需要进行身份验证配置,但未正确配置

未找到 AWS Amplify 环境“开发”

AWS- Amplify - Appsync:使用 CLI 从 Android 应用程序更改云资源时,正确的工作流程是啥?

aws-amplify js 到 Angular 应用程序有错误:未定义全局