GraphQL嵌套查询返回null

GraphQL嵌套查询返回null,graphql,graphql-js,apollo-server,Graphql,Graphql Js,Apollo Server,我正在尝试使用GraphQL嵌套查询(我80%确定这是一个嵌套查询?)来获取有关列表和列表的主厨(作者)的信息。我可以很好地获得列表信息,但我无法获得厨师信息 我的印象是,当getListing(args)返回时,如果厨师没有有效的user对象,默认的解析器(用户)就会启动。但是默认的解析器似乎没有启动 如何正确获取嵌套信息 例如,我的查询是: query getListing($listingID: String!) { getListing(listingID: $listingID)

我正在尝试使用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服务器,并在后端与DynamoDB集成

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


尚不清楚
getUser
接受哪种类型的参数,因此需要相应地修改上述示例。除非在模式中为要解析的字段指定参数,否则不会使用
args
。返回的列表似乎有一个
chef
属性,该属性是用户的名称,因此您可以使用
parent.chef
访问该值

解析程序仅存在于字段级别。无法解析类型(即
User
)。您只能解析具有该类型的字段。@DanielRearden我认为是这样,但当我为
chef
(类似于
用户
解析程序)GraphQL输入解析程序时,我一点也不喜欢这样。您如何正确解析“厨师”字段?谢谢它有效!!!!这是最奇怪的方法,但它很有道理。非常感谢你一直支持我!我知道解释看似琐碎的概念需要花费很多时间,但最终理解这些概念对我来说意义重大。谢谢我有一个类似的问题-但是“getUser”似乎受到限制,因为“chef”不能被设置为“async chef”,这在从数据库获取数据时对我来说似乎是有意义的。在本例中,“chef”只是一个JSON对象,其中包含对用户对象的引用。或者也许还有其他一些微妙之处,我在这里遗漏了。这还意味着在数组中,每次都调用getUser。
const resolvers = {
  // ...
  Listing: {
    chef: (parent, args) => {
      return getUser()
    }, 
  },
}