Делегирование схемы GraphQL Apollo: info.mergeInfo не определено - PullRequest
1 голос
/ 19 мая 2019

Я следовал официальному документу , чтобы делегировать схему graphql , которая указывает, что для этого необходимо использовать метод delegateSchema, который можно найти в свойстве mergeInfo аргумента info передается распознавателям:

resolver: (parent, args, ctx, info) => {
  return info.mergeInfo.delegateSchema({
    // Schema delegation options...
  })
}

Но у аргумента info нет свойства mergeInfo!И вот я получаю это сообщение об ошибке: GraphQL Error GraphQL error: Cannot read property 'delegateToSchema' of undefined, что является нормальным, учитывая, что это свойства верхнего уровня info:

console.log(Object.keys(info))
[
  'fieldName',
  'fieldNodes',
  'returnType',
  'parentType',
  'path',
  'schema',
  'fragments',
  'rootValue',
  'operation',
  'variableValues',
  'cacheControl'
]

Похоже, что mergeInfo не упоминаетсяв определении типа объекта GraphQLResolveInfo

Документ устарел или я что-то упустил?

Спасибо

1 Ответ

2 голосов
/ 19 мая 2019

mergeInfo вводится в информационный объект только тогда, когда вы используете mergeSchemas для сшивания двух или более схем.Кроме того, только будет вставлено в резольверы для полей, которые вы добавляете как часть сшивания схемы - на резольверы для схем это не повлияет (на самом деле не имеет смысла делегировать *)1006 * к другой схеме в контексте одной из существующих схем в любом случае).

Вот простой пример:

const { makeExecutableSchema, mergeSchemas } = require('graphql-tools')

const schemaA = makeExecutableSchema({
  typeDefs: `
    type Query {
      foo: String
    }
  `,
})
const schemaB = makeExecutableSchema({
  typeDefs: `
    type Query {
      bar: String
    }
  `,
})
const typeDefs = `
extend type Query {
  foobar: String
}
`
const schema = mergeSchemas({
  schemas: [schemaA, schemaB, typeDefs],
})

Здесь преобразователи для foo и bar будутне иметь доступа к mergeInfo, но распознаватель для foobar будет.

...