2016-09-22 2 views
6

Wie kann ich Resolver für meine FriendList mit der neuen GraphQL Schema Sprache machen? FriendList haben eine Reihe von Menschen _id.Verschachtelte Abfrage für das neue GraphQL buildSchema

Meine neue Leute geben mit GraphQL Schema Sprache:

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

Meine alte Menschen geben mit 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); 
 
    }, 
 
    }), 
 
});

ich diese Abfrage erreichen wollen:

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

Haben Sie jemals die Antwort darauf gefunden? Ich kämpfe gerade jetzt selbst durch. –

Antwort

3

Ich konnte keinen Weg finden, dies mit graphql-js zu tun, also wechselte ich zu einer ähnlichen Implementierung von den Leuten bei Apollo namens graphql-tools.

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

Sie haben eine Funktion makeExecutableSchema genannt, die ein Schema in der GraphQL Schema-Sprache geschrieben nimmt und kombiniert sie mit (verschachtelten) Resolver-Funktionen. Dies behebt das Problem und ist eigentlich ziemlich einfach zu integrieren, wenn der Code die Sprache des GraphQL-Schemas verwendet.

Sie haben auch ein anderes Agnostiker Werkzeug, um dieses neue Schema für die Belichtung, die Express-graphql ersetzt, dessen GraphQL-Server:

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

Überprüfen Sie die Dokumentation und hoffentlich gibt Ihnen die Flexibilität komplexen Code zu schreiben Verwenden der Syntaxsprache von GraphQL Schema!

5

Ihr Resolver sollte eine neue Instanz einer Klasse zurückgeben, wie in der aktualisierten GraphQL-Dokumentation erläutert: http://graphql.org/graphql-js/object-types/.

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

ok eine kurze Frage..was wenn freelist ist von einer anderen Art wie (Freunde) friendList: Freunde. Wie können Sie das in der Personenklasse lösen? – kweku360

+0

@ kweku360 Die 'friendList' repräsentiert einen Feldresolver. Ich ermutige Sie, die [contextable.js] (https://github.com/xpepermint/contextablejs#graphql-root-resolver) zu überprüfen. Es kann jetzt als GraphQL rootValue-Resolver verwendet werden. – xpepermint

Verwandte Themen