2017-02-18 69 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