Получение Невозможно прочитать свойство 'args' из undefined при попытке связать схемы с сервером apollo - PullRequest
0 голосов
/ 16 февраля 2019

Похоже, что есть некоторые похожие вопросы, но ни один из них не совпадает с тем, где я получаю ошибку, и ни один из них не содержит аргументов undefined.

Я получил его для работы, чтобы иметь несколько других graphqlАпис и объединить их.Просто объединяйте их, все идет хорошо, но когда я пытаюсь сделать стежок, я получаю ошибку, показанную ниже:

"errors": [
{
  "message": "Cannot read property 'args' of undefined",
  "locations": [
    {
      "line": 9,
      "column": 9
    }
  ],
  "path": [
    "flows",
    "edges",
    0,
    "node",
    "sourceAddresses"
  ],
  "extensions": {
    "code": "INTERNAL_SERVER_ERROR",
    "exception": {
      "stacktrace": [
        "TypeError: Cannot read property 'args' of undefined",
        "    at /opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:103:15",
        "    at Array.forEach (<anonymous>)",
        "    at /opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:95:39",
        "    at Array.map (<anonymous>)",
        "    at addVariablesToRootField (/opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:66:36)",
        "    at AddArgumentsAsVariablesTransform.transformRequest (/opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:31:11)",
        "    at /opt/node_modules/graphql-tools/src/transforms/transforms.ts:24:21",
        "    at Array.reduce (<anonymous>)",
        "    at Object.applyRequestTransforms (/opt/node_modules/graphql-tools/src/transforms/transforms.ts:21:21)",
        "    at /opt/node_modules/graphql-tools/src/stitching/delegateToSchema.ts:90:28"
      ]
    }
  }
}

]

У меня есть служба schemaRetriever, которая извлекает схемы из 3GraphQL Api's.Сейчас я пытаюсь заставить работать 1 стежок, чтобы код на данный момент не был «хорошим».

Вот фрагмент кода, в котором я пытаюсь запустить стежок:

    const aSchema = await this.schemaRetrieverService.retrieveASchema();
const housesSchema = await this.schemaRetrieverService.retrieveHousesSchema();
const addressSchema = await this.schemaRetrieverService.retrieveAddressSchema();

return mergeSchemas({
  schemas: [
    aSchema,
    housesSchema,
    addressSchema,
        `
    extend type Houses {
      houseAddresses: Addresses
    }

    extend type Addresses {
      houses: Houses
    }

    type Query {
      addressByHouseId(id: ID!): Addresses
    }
  `
  ],
  resolvers: {
    Houses: {
      houseAddresses: {
        fragment: `... on Houses { id }`,
        resolve(house, args, context, info) {
          return info.mergeInfo.delegateToSchema({
            schema: addressSchema,
            operation: 'query',
            fieldName: 'addressByHouseId',
            args: {
              id: house.houseAddress,
            },
            context,
            info,
          });
        },
      },
    },
  },
});

Я проверил, что «house.houseAddress» содержит правильный требуемый идентификатор, и я продолжаю получать ту же ошибку, хотя я помещаю действительный идентификатор в переменную args.Я что-то здесь упускаю?или большой?Если бы кто-то мог дать мне указатель, я был бы очень благодарен.

Большое спасибо заранее, и если какая-либо информация отсутствует, пожалуйста, дайте мне знать, я постараюсь добавить всю необходимую информацию.

1 Ответ

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

Я нашел ответ на эту проблему, которую я имею, и, поскольку делиться заботой, я отвечу на свой вопрос здесь.Поскольку я был новичком в этом, я действительно не знал, что произошло на заднем плане.Для людей, которые могут столкнуться с той же проблемой.

Поскольку я был так сосредоточен на вышивании, я забыл, что в моих микросервисах есть функции, для которых я получаю схемы.При сшивании имя поля, присвоенное стежку, должно быть функцией, которая может быть вызвана для объекта.

Это означает, что fieldName: 'addressByHouseId' ссылается на функцию, которая должна существовать для типа Houses.

Вы можете добавить эту функцию на объекте на уровне микросервиса, или то, что я сделал в моем случае, относится к (по умолчанию, сгенерированной с помощью API-платформы) функции house (id).Теперь есть актуальная реализация, которую можно использовать для строчки.

...