Сшивание схемы GraphQL - Невозможно прочитать свойство 'args' из неопределенного - PullRequest
0 голосов
/ 11 марта 2019

Это сводит меня с ума, просто потому, что я не могу найти достаточно ошибок, чтобы отследить их.Google тоже не сильно помог.

В двух словах, я пытался изучить схему сшивания, используя этот пример , и с полки все работает отлично.Затем я попытался заменить жестко закодированные данные для моих собственных «реальных» данных (коллекции NoSQL, хранящиеся в mLab), и я могу нормально запросить каждый API через API шлюза, но только по отдельности.В тот момент, когда я пытаюсь их прошить, я получаю Cannot read property 'args' of undefined.Трассировка минимального стека говорит, что в моих средствах распознавания фрагментов происходит ошибка info.mergeInfo.delegateToSchema, но я даже не могу сделать console.log, который не помогает.

Я использую Mongoose для моей модели / схемы (которая отлично работает, когда я не пытаюсь объединить их, поэтому я не думаю, что это так).

Мой фрагмент Post.user:

export default schema => ({
  user: {
    fragment: `fragment PostFragment on Post { authorId }`,
    resolve(parent, args, context, info) {
      const id = parseInt(parent.user);
      return info.mergeInfo.delegateToSchema({
        schema,
        operation: 'query',
        fieldName: 'authorId',
        args: {
          id
        },
        context,
        info
      });
    }
  }
});

Мой главный post.js resolver:

// ...
const resolvers = {
  Query: {
    allPosts: async () => {
      const posts = await Post.find(); // works by itself

      return posts;
    },
    post: async (parent, { id }) => {
      const post = await Post.findById(id); // works by itself
      return post;
    }
  }
};

export default resolvers;

Мои отношенияSchema:

const relationsSchema = `
  extend type User {
    posts: [Post]
  }

  extend type Post {
    author: User
  }
`;

export default relationsSchema;

И схема слияния:

import { mergeSchemas } from 'graphql-tools';

import makeResolvers from '../resolver';

import makePostSchema from '../remoteSchema/post';
import makeUserSchema from '../remoteSchema/user';
import relationsSchema from './relations';

// use schema stitching technique to merge schems together
export default async () => {
  const postSchema = await makePostSchema();
  const userSchema = await makeUserSchema();

  const resolvers = makeResolvers({ postSchema, userSchema });

  return mergeSchemas({
    schemas: [postSchema, userSchema, relationsSchema],
    resolvers
  });
};

Я буду рад поделиться еще кодом, если вам это нужно.Заранее спасибо !!

1 Ответ

0 голосов
/ 17 июля 2019

У меня тоже был такой же опыт.Для меня,

  extend type User {
Customer(id: string): [Orders]

} `;

Это показало мне args.id как и все, что я передал id из графика.

...