【问题标题】:Handle graphql schema stitching error in child query处理子查询中的 graphql 模式拼接错误
【发布时间】:2019-11-07 03:17:25
【问题描述】:

我是 graphql 的新手,想了解这里的概念。我有这个 graphql 模式(使用图形工具缝合)。并非所有汽车都有注册。因此,如果我查询 5 辆汽车,而一辆汽车没有注册(没有 id 来链接汽车和注册),我的整个查询都会失败。

我该如何处理并为那 1 辆车返回 null 并为其他 4 辆车返回注册详细信息?

{
  Vehicles {
    Cars {
      id
      registration {
        id
      }
    }
  }
}

【问题讨论】:

    标签: graphql apollo-server express-graphql graphql-tools


    【解决方案1】:

    如果您将字段标记为 non-null(通过将 ! 附加到类型)然后将该字段解析为 null,GraphQL 将总是抛出错误 - 这是不可避免的。如果在您的 API 的正常操作中某个字段可能最终为 null,您可能应该将其设为可空

    但是,错误 "bubble up" 到最近的可为空字段。

    所以给定这样的架构:

    type Query {
      cars: [Car!]!
    }
    
    type Car {
      registration: Registration!
    }
    

    还有这个查询

    {
      cars {
        registrations
      }
    }
    

    将任何Carregistration 字段解析为null 将导致以下结果,因为cars 字段不为空并且每个单独的Car 也不得为null

    {
      "data": null,
      "errors": [...]
    }
    

    如果您将 cars 字段设置为可空 ([Car!]),则错误将停止:

    {
      "data": {
        "cars": null
      },
      "errors": [...]
    }
    

    但是,您可以将每个Car 设为可空(无论该字段是否为空),这将使错误停在那里并产生一组对象和空值(空值是出错的汽车)。所以制作cars 类型[Car]![Car] 会给我们:

    {
      "data": {
        "cars": [{...}, {...}, null]
      },
      "errors": [...]
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-17
      • 2021-10-30
      • 2018-04-23
      • 2022-06-30
      • 2018-12-27
      • 2020-09-07
      • 1970-01-01
      • 2017-01-30
      • 2017-06-05
      相关资源
      最近更新 更多