Apollo: передача root для распознавателя с помощью info.mergeInfo.delegateToSchema - PullRequest
0 голосов
/ 05 марта 2019

У меня есть сшитая схема graphql. Некоторые поля типов разрешаются с помощью info.mergeInfo.delegateToSchema

Вот пример (из apollo docs ):

const mergedSchema = mergeSchemas({
  schemas: [
    transformedChirpSchema,
    authorSchema,
    linkTypeDefs,
  ],
  resolvers: {
    User: {
      chirps: {
        fragment: `... on User { id }`,
        resolve(user, args, context, info) {
          return info.mergeInfo.delegateToSchema({
            schema: chirpSchema,
            operation: 'query',
            fieldName: 'chirpsByAuthorId',
            args: {
              authorId: user.id,
            },
            context,
            info,
          });
        },
      },
    },
});

Возможно ли получить доступ к root в chirps распознавателе? Чтобы в root были все родительские поля? Другой способ, конечно, использовать context для этой цели, но использование root, я думаю, было бы лучше с точки зрения кода, поскольку в некоторых случаях я уже использую значение root.

1 Ответ

0 голосов
/ 08 марта 2019

Под капотом info.mergeInfo.delegateToSchema можно вызвать удаленное приложение GraphQL (подробнее Подробнее ).

Таким образом, по замыслу удаленный распознаватель не имеет доступа к локальному корню / context / info / arg, вам необходимо отправить все необходимые данные в аргументах для удаленного поля. Например:

const mergedSchema = mergeSchemas({
  schemas: [
    transformedChirpSchema,
    authorSchema,
    linkTypeDefs,
  ],
  resolvers: {
    User: {
      chirps: {
        fragment: `... on User { id }`,
        resolve(user, args, context, info) {
          return info.mergeInfo.delegateToSchema({
            schema: chirpSchema,
            operation: 'query',
            fieldName: 'chirpsByAuthorId',
            args: {
              // author is InputType at remove schema with similar user structure
              author: user,
            },
            context,
            info,
          });
        },
      },
    },
});

Я не знаю ваш случай, но не забыл о преобразованиях схемы при работе со схемами удаления.

...