我正在将<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
答案 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,
}
}
通过指定自定义解析器,您可以根据父解析器的返回值来计算要返回到客户端的字段。