Apollo Server v2 - распознаватель GraphQL не вызывается - PullRequest
0 голосов
/ 28 сентября 2019

Я новичок в мире graphql и пытаюсь настроить несколько модульных схем и распознавателей с помощью Apollo Server v2.

Я заметил странное поведение, в котором у меня возникают проблемы с порядком расположения моих распознавателей.В строке Object.assign({}, propertiesResolver, agreementsResolver) все распознаватели, определенные в propertiesResolver, не вызываются, поскольку они являются первыми в порядке распознавания.Если я поменял местами два набора преобразователей, таких как Object.assign({}, agreementsResolver, propertiesResolver), то теперь распознаватели, определенные соглашениемResolver, не вызываются.

Я упускаю здесь некоторые важные подробности о выполнении graphql?

Примечание: Все мои определения схемы и соответствующие резолверы определены правильно, я чувствую, что что-то не так с порядком, в котором я импортирую вещи.

1 Ответ

1 голос
/ 28 сентября 2019

При использовании Object.assign :

Свойства в целевом объекте будут перезаписаны свойствами в источниках, если они имеют одинаковый ключ.Более поздние свойства источников будут аналогично перезаписывать более ранние.

Object.assign не выполняет глубокое слияние , что, по-видимому, соответствует ожиданиям.Если два источника имеют одинаковое свойство, будет использоваться только свойство последнего источника.Таким образом, с учетом двух объектов, таких как:

const a = {
  Query: {
    foo: () => 'FOO',
  },
}
const b = {
  Query: {
    bar: () => 'BAR',
  },
}

, если вы используете Object.assign для их объединения, результирующий объект будет иметь одно свойство Query, которое соответствует либо a, либо b (в зависимости от того, какойбыл последним параметром).Чтобы выполнить слияние deep , объединяющее объекты со свойствами с одинаковым именем, вы должны использовать существующее решение, например lodash :

const resolvers = _.merge(a, b)

или что-то похожее .

...