GraphQL嵌套查询返回null

时间:2019-09-13 17:06:24

标签: graphql graphql-js apollo-server

我正在尝试使用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集成。

1 个答案:

答案 0 :(得分:1)

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

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

目前尚不清楚getUser接受哪种类型的参数,因此您需要相应地修改上面的示例。除非您为架构中要解析的字段指定参数,否则您将不会使用args。看起来返回的列表具有一个chef属性,它是用户的名称,因此您可以使用parent.chef访问该值。