2016-09-22 1 views
6

friendListの新しいGraphQLスキーマ言語でのリゾルバの作成方法を教えてください。 friendListは_idの配列を持っています。新しいGraphQLのネストされたクエリbuildSchema

私の新しい人々がGraphQLスキーマ言語と入力します。

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); 
 
    }, 
 
    }), 
 
});

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

私の昔の人々はGraphQLObjectTypeと入力し
const schema = buildSchema(` 
 
    type People { 
 
    _id: String 
 
    firstName: String 
 
    lastName: String 
 
    demo: String 
 
    friendList: [People] 
 
    } 
 
    type Query { 
 
    getPeople(_id: String): People 
 
    } 
 
`);

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

これまでにこの回答が見つかりましたか?今自分自身で苦労している。 –

答えて

3

graphql-jsでこれを行う方法が見つかりませんでしたので、graph0-toolsというApolloの人々から同様の実装に切り替えました。

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

彼らはGraphQLスキーマ言語で書かれたスキーマを取り、(ネスト)リゾルバ機能とそれを組み合わせたmakeExecutableSchemaと呼ばれる機能を持っています。これにより問題は修正され、コードでGraphQLスキーマ言語が使用されている場合は、実際に統合するのが非常に簡単です。ドキュメントをチェックアウト

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

とうまくいけば、これはあなたに複雑なコードを記述するための柔軟性を提供します:

彼らはまた、表現-graphqlを置き換え、この新しいスキーマを露出させるための別とらわれないツール、そのGraphQLサーバを持っていますGraphQLスキーマ言語の構文を使用して!

5

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

class People { 
    friendList() {} 
} 
var rootValue = { 
    getPeople: function() { 
    return new People(); 
    } 
} 
+0

okかんたん質問。友達リストが(友人)のような別のタイプのものなら、friendList:友達。どのようにあなたはその人のクラス内でそれを解決できますか? – kweku360

+0

@ kweku360 'friendList'はフィールドリゾルバを表します。 [contextable.js](https://github.com/xpepermint/contextablejs#graphql-root-resolver)を確認することをお勧めします。 GraphQLのrootValueリゾルバとして使用できるようになりました。 – xpepermint

関連する問題