Передать параметры функциям резолвера подузлов

У меня есть этот запрос 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,

Надеюсь, поможет.

Другие вопросы по тегам