我有这个graphql查询,它查找与项目相关的所有服务(给定其ID),并且对于每个服务,它返回有权访问的用户列表。
query Project ($id: ID!) {
services {
mailService {
users
}
}
}
我想知道传递id
参数的最佳解决方案是什么,并在users
解析器函数中使用它。
我正在考虑这些解决方案:
感谢您的帮助
答案 0 :(得分:0)
您可以使用对象类型的本机解析来实现。
在子节点的解析中,您可以访问整个父数据。 例如:
export const User: GraphQLObjectType = new GraphQLObjectType({
name: 'User',
description: 'User type',
fields: () => ({
id: {
type: new GraphQLNonNull(GraphQLID),
description: 'The user id.',
},
name: {
type: new GraphQLNonNull(GraphQLString),
description: 'The user name.',
},
friends: {
type: new GraphQLList(User),
description: 'User friends',
resolve: (source: any, args: any, context: any, info: any) => {
console.log('friends source: ', source)
return [
{id: 1, name: "friend1"},
{id: 2, name: "friend2"},
]
}
}
}),
})
const Query = new GraphQLObjectType({
name: 'Query',
description: 'Root Query',
fields: () => ({
user: {
type: User,
description: User.description,
args: {
id: {
type: GraphQLInt,
description: 'the user id',
}
},
resolve: (source: any, args: any, context: any, info: any) => {
console.log('user args: ', args)
return { id: 2, name: "user2" }
}
}
})
})
在friends
解析中,source
参数具有来自父user
解析的整个返回值。因此,在这里我可以根据从source
获得的用户ID来获取所有朋友。
希望有帮助。