Передать параметры функциям резолвера подузлов
У меня есть этот запрос graphql, он ищет все службы, связанные с проектом (с учетом его идентификатора), и для каждой службы он возвращает список пользователей, к которым есть доступ.
query Project ($id: ID!) {
services {
mailService {
users
}
}
}
Я хочу знать, что является лучшим решением для прохождения id
параметр и использовать его внутри users
функция резольвера.
Я думаю об этих решениях:
- Добавьте параметр $ id как для mailService, так и для узлов пользователей в запросе.
- В промежуточном программном обеспечении graphql на сервере добавьте объект параметров в поле контекста (из request.body)
- Добавьте поле в объект контекста в Project resolver: context.projectId = $id и используйте его в преобразователях подполей.
Спасибо за помощь
1 ответ
Вы можете сделать это с родным разрешением формы типов объектов.
В разрешении подузла вы можете получить доступ ко всем родительским данным. Например:
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
param имеет все возвращаемые значения от родителя user
разрешить. Таким образом, здесь я мог бы выбрать всех друзей на основе идентификатора пользователя, который я получил от source
,
Надеюсь, поможет.