2017-02-18 54 views
1

我设法通过GraphQL得到以下数据:GraphQL - 显示列表或单个对象

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

我有查询类型,CityType和用户类型。在我的QueryType中,我通过GraphQLList(UserType)获取城市并显示用户。如果我想显示单个用户,如果提供了一个ID,我应该怎么做?

我的API是这样的:

all cities: 
    /cities/ 

single city: 
    /cities/:city_id 

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

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

回答

1

你需要一个user查询添加到您的主查询对象。

假设你idInteger,你可以这样做

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

然后你就可以使用

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

查询,也可以做一个函数

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

谢谢,其实我添加用户查询到我的'CityType'对象,而不是我的主查询对象。它的工作原理,但我硬编码的抓取网址,因为我不知道如何将city_id传递给我的'UserType'。我的单身用户网址如下所示:'/ cities /:city_id/users /:user_id' – sympi

+0

您只需将'city_id'添加为查询的另一个参数即可。然后使用'user(cityId:$ city_id,id:$ id)' - 这两个参数都可以在'args'中使用,因此您仍然可以只执行'db.users.findOne(args)'。 – naomik