GraphQL 嵌套查询返回 null

Posted

技术标签:

【中文标题】GraphQL 嵌套查询返回 null【英文标题】:GraphQL nested query returns null 【发布时间】:2020-01-15 13:43:30 【问题描述】:

我正在尝试使用 GraphQL 嵌套查询(我有 80% 的把握这是一个嵌套查询?)来获取关于列表的信息和列表的主厨(作者)。我可以很好地获取列表信息,但我无法获取厨师信息。

我的印象是,当 getListing(args) 返回时没有为厨师提供有效的 User 对象时,默认解析程序(用户)会触发。但是默认解析器似乎没有被触发。

如何正确获取嵌套信息?

例如,我的查询是:

query getListing($listingID: String!) 
  getListing(listingID: $listingID) 
    name
    chef 
      firstName
    
  

查询返回:


  "data": 
    "getListing": 
      "name": "Test",
      "chef": 
        "firstName": null
      
    
  

函数getListing(args)查询数据库并返回:


  name: 'Test',
  chef: 'testUsername',
  listingID: 'testListingID'

我的架构是:

type Listing 
  uuid: String!
  name: String!
  chef: User!


type User 
  username: String
  firstName: String


type Query 
  getUser(jwt: String!): User
  getListing(listingID: String): Listing

我的解析器是:

const resolvers = 
  Query: 
    getListing: async (parent, args, context, info) => 
      console.log('GET_LISTING');
      return getListing(args);
    ,
    getUser: async (parent, args, context, info) => 
      console.log('GET_USER');
      return getUser(args);
    ,
  ,

  User: async (parent, args) => 
    console.log('USER RESOLVER');
    return getUser(args);
  ,
;

其他信息: 我正在使用在 AWS Lambda 上运行的 Apollo Server,与后端的 DynamoDB 集成。

【问题讨论】:

解析器仅存在于字段级别。您无法解析类型(即User)。您只能解析具有该类型的字段。 @DanielRearden 我是这么想的,但是当我为chef 放入解析器(类似于User 解析器)时,GraphQL 根本不喜欢这样。您将如何正确解决厨师领域?谢谢! 【参考方案1】:

解析器仅存在于字段级别。您无法解析类型(即用户)。您只能解析具有该类型的字段(即chef)。

const resolvers = 
  // ...
  Listing: 
    chef: (parent, args) => 
      return getUser()
    , 
  ,

不清楚getUser接受什么样的参数,所以你需要相应地修改上面的例子。您不会使用args,除非您实际为架构中正在解析的字段指定参数。看起来返回的列表有一个chef 属性,它是用户名,因此您可以使用parent.chef 访问该值。

【讨论】:

它工作!!!!这是最奇怪的做法,但它很有意义。非常感谢你一直陪着我!我知道解释看似微不足道的概念需要很多时间,但最终理解对我来说确实意义重大。谢谢! 我有一个类似的问题 - 但“getUser”似乎受到限制,因为“厨师”不能成为“异步厨师”,这在从数据库获取数据时对我来说似乎很有意义。在这种情况下,'chef' 只是一个 JSON 对象,其中包含对用户对象的引用。或者也许我在这里遗漏了其他一些微妙之处。这也意味着在数组中,每次都会调用 getUser。

以上是关于GraphQL 嵌套查询返回 null的主要内容,如果未能解决你的问题,请参考以下文章

对 GraphQL 中嵌套类型的深度查询返回 NULL

GraphQL 突变为嵌套响应返回 null

嵌套的 Mongoose 查询数据未显示在 GraphQL 查询中

GraphQL 简单嵌套查询返回空字段

type-Graphql 中的嵌套查询和变异

GraphQL 嵌套查询查找