8

新しい GraphQL スキーマ言語を使用して、 friendListのリゾルバーを作成するにはどうすればよいですか? friendList には people _id の配列があります。

GraphQL スキーマ言語を使用した新しい人物タイプ:

const schema = buildSchema(`
  type People {
    _id: String
    firstName: String
    lastName: String
    demo: String
    friendList: [People]
  }
  type Query {
    getPeople(_id: String): People
  }
`);

私の昔の人は、GraphQLObjectType を使用して入力します。

const PeopleType = new GraphQLObjectType({
  name: 'People',
  fields: () => ({
    _id: {
      type: GraphQLString,
    },
    firstName: {
      type: GraphQLString,
    },
    lastName: {
      type: GraphQLString,
    },
    friendList: {
      type: new GraphQLList(PeopleType),
      // pass @friends parentValue
      resolve: ({ friends }) {
        return People.find({ _id: { $in: friends } }).then(res => res);
    },
  }),
});

私はこのクエリを達成したい:

{
  people(_id: "ABC123") {
    firstName
    lastName
    friendList {
      firstName
      lastName
    }
  }
4

2 に答える 2

10

更新された GraphQL ドキュメント ( http://graphql.org/graphql-js/object-types/ ) で説明されているように、リゾルバーはクラスの新しいインスタンスを返す必要があります。

class People {
  friendList () {}
}
var rootValue = {
  getPeople: function () {
    return new People();
  }
}
于 2016-11-17T19:03:22.763 に答える
4

これを graphql-js で行う方法が見つからなかったので、Apollo の人々からの同様の実装である graphql-tools に切り替えました。

http://dev.apollodata.com/tools/graphql-tools/generate-schema.html

それらにはmakeExecutableSchema、GraphQL スキーマ言語で記述されたスキーマを取り、それを (ネストされた) リゾルバー関数と組み合わせるという関数があります。これにより問題が修正され、コードで GraphQL スキーマ言語を使用している場合、実際に統合するのは非常に簡単です。

彼らはまた、そのGraphQLサーバーであるexpress-graphqlを置き換えるこの新しいスキーマを公開するための別の非依存ツールを持っています:

http://dev.apollodata.com/tools/graphql-server/index.html

ドキュメントを確認してください。これにより、GraphQL スキーマ言語構文を使用して複雑なコードを柔軟に記述できるようになることを願っています!

于 2016-11-03T00:18:03.717 に答える