2017-02-18 1 views
1

ich es geschafft haben folgende Daten durch GraphQL zu erhalten:GraphQL - Liste anzeigen oder einzelnes Objekt

{ 
    "data": { 
    "city": { 
     "name": "Eldorado", 
     "users": [ 
     { 
      "username": "lgraham1" 
     }, 
     { 
      "username": "ehowell" 
     }, 
     { 
      "username": "cbauch" 
     } 
     ] 
    } 
    } 
} 

Ich habe querytype, CityType und Usertype. In meinem QueryType hole ich Stadt und zeige Benutzer durch GraphQLList (UserType) an. Was kann ich tun, wenn ich einen einzelnen Benutzer anzeigen möchte, wenn eine ID bereitgestellt wird?

Meine API sieht wie folgt aus:

all cities: 
    /cities/ 

single city: 
    /cities/:city_id 

users for particular city: 
    /cities/:city_id/users 

single user: 
    /cities/:city_id/users/:user_id 

Antwort

1

Sie erhalten eine user Abfrage an Ihre Haupt-Abfrage-Objekt hinzufügen müssen.

Angenommen, Ihre id ein Integer ist, würden Sie dies tun

const Query = new GraphQLObjectType({ 
    name: 'RootQuery', 
    fields: { 
    // ... 
    user: { 
     type: User, 
     args: { 
     id: { 
      type: new GraphQLNonNull(GraphQLInt) 
     } 
     }, 
     resolve: function(rootValue, args) { 
     return db.users.findOne(args) 
     } 
    } 
    } 
}) 

const Schema = new GraphQLSchema({ 
    query: Query, 
    // ... 
}); 

Dann können Sie

{ 
    user (id: 12345) { 
    ... 
    } 
} 

mit Query oder Sie können eine Funktion

query findUser ($id: Int!) { 
    user (id: $id) { 
    ... 
    } 
} 
+0

Dank machen, habe ich eigentlich Benutzeranfrage zu meinem 'CityType'-Objekt hinzugefügt, nicht zu meinem Haupt-' Query'-Objekt. Es funktioniert, aber ich habe die Fetch-URL fest programmiert, weil ich nicht weiß, wie city_id an meinen 'UserType' übergeben wird. Meine URL für einen einzelnen Benutzer sieht folgendermaßen aus: '/ cities /: city_id/users /: user_id' – sympi

+0

Sie würden einfach' city_id' als weiteres Argument in die Abfrage einfügen. Dann benutze 'user (cityId: $ city_id, id: $ id)' - beide params wären in 'args' verfügbar, so dass du einfach' db.users.findOne (args) 'machen kannst. – naomik

Verwandte Themen