带数组参数的嵌套GraphQL查询

时间:2019-06-17 20:28:10

标签: graphql apollo-server

我正在将<div class="list"> <button class="list-item" type="button">Africa</button> <button class="list-item" type="button">Antarctica</button> <button class="list-item" type="button">Asia</button> <button class="list-item" type="button">Europe</button> <button class="list-item" type="button">North America</button> <button class="list-item" type="button">Australia</button> <button class="list-item" type="button">South America</button> </div>apollo-datasource-rest一起使用,并试图弄清楚如何将查询映射到特定的解析器。我有以下架构,其中apollo-server-lambda查询应该返回用户列表(应该由plan查询而不是users查询驱动)。

user

type Query { user(user_id: String, username: String): User users(user_ids: [String!]): [User!] plan(plan_id: String): Plan } type User { id: String username: String first: String last: String image: String } type Plan { title: String image: String attending: [User] } 查询解析器数据源如下:

plan
planReducer(data) { return { image: data.public.info.image, title: data.public.info.title, attending: Object.keys(data.public.attending) } } 中的

data.public.attending返回由planReducer组成的数组,我希望这些数组能够输入到我的user_id查询中,而不是我的{{1 }}查询。

这些是我目前的解析器:

users

1 个答案:

答案 0 :(得分:1)

您的解析器映射应如下所示:

const resolvers = {
  Query: {
    plan: async (_parent, { plan_id: planId }, { dataSources }) => (
      dataSources.planData.getPlanById({ planId })
    )
  },
  Plan: {
    users: async ({ user_ids: userIds }, _variables, { dataSources }) => (
      dataSources.userData.getUsersByIds({ userIds })
    )
  }
}

Query中的每个键都应该是一个解析器,该解析器与在模式的根Query中定义的查询相对应。当从Plan内的plan解析器返回时,作为根的直接子代的键(在这种情况下为Query)将用于解析其对应的类型。

如果未定义解析器,则GraphQL将退回到默认的解析器,在这种情况下,它看起来像:

const resolvers = {
  Plan: {
    title: (parent) => parent.title,
    image: (parent) => parent.image,
  }
}

通过指定自定义解析器,您可以根据父解析器的返回值来计算要返回到客户端的字段。