2017-09-18 5 views
1

Mein Schema.graphql von Relais, das ist die Struktur I, zu erreichen bin versuchtAusgestaltung des Relais spec Betrachter in GraphQL

type Root { 
    viewer: Viewer 
} 

type Viewer { 
    categories(id: ID): Category 
    subCategories(CategoryId: ID!) : [SubCategory] 
    items(SubCategoryId: ID): Item 
    shopItems(ShopId: ID, SubCategoryId:ID): Item 
} 

Jetzt ist der Server, mein viewer.js wie folgt aussieht,

const Viewer = new GraphQLObjectType({ 
    name: 'viewer', 
    fields: { 
    categories, 
    subCategories, 
    Items, 
    shopItems, 
    }, 
}); 

und die Wurzel ist,

const RootQuery = new GraphQLObjectType({ 
    name: 'query', 
    fields: { 
    viewer: { 
     type: Viewer, 
    }, 
    }, 
}); 

Es gibt mir die Struktur ich will, aber ich kann nichts von rootQuery, viewer si lösen Mply gibt NULL zurück, weil ich den Viewer-Typ in RootQuery nicht auflösung. Irgendwelche Ideen, wie man diese Relay-Spezifikationsstruktur richtig implementiert? Danke Jungs

Antwort

0

In Abwesenheit des Codes Ihres Resolvers (vielleicht verwenden Sie die Standardeinstellung), sollte dies helfen.

Sie verwenden ein akzeptiertes Muster eine Wurzel viewer Objekt zu haben, deren „Typ“ ist der eigentliche Abfrage Typ root. Dieser Typ muss seinen Feldern eine Möglichkeit geben, sich zu Ihrer realen Architektur aufzulösen. Zum Beispiel:

const subCategories = { 
    type: GraphQLList({ ofType: SubCategory }), 
    arguments: { 
    CategoryId: { type: GraphQLNonNull({ ofType: GraphQLID }), 
    }, 
    resolve(rootValue, { CategoryId }, context, info) { 
    // look stuff up based on CategoryId and return it 
    }, 
}; 

const Viewer = new GraphQLObjectType({ 
    name: 'viewer', 
    fields: { 
    categories, 
    subCategories, 
    Items, 
    shopItems, 
    }, 
}); 
+0

Nun, ich habe das schon getan. Diese Felder sind bereits definiert und werden importiert. –

+0

Grapqhl möchte, dass ich das Viewer-Feld in der Root-Abfrage auflöse. Das kann ich natürlich nicht tun. –

+0

Sicher können Sie das tun, nur Ihre eigene Resolver-Funktion zu "graphql" liefern? –

0

Dumm mich, löste es durch Zuschauer wie diese Lösung,

const RootQuery = new GraphQLObjectType({ 
    name: 'query', 
    fields: { 
    viewer: { 
     type: Viewer, 
     resolve(viewer, args) { 
     return {viewer: viewer} 
    } 
    }, 
    }, 
}); 
Verwandte Themen