2016-09-21 39 views
1

我得到以下「問題」。我習慣於擁有這樣的API。GraphQL列表或單個對象

/users 
/users/{id} 

第一個返回用戶列表。第二個只是一個對象。我希望與GraphQL一樣,但似乎失敗。我得到了以下Schema

var schema = new GraphQLSchema({ 
    query: new GraphQLObjectType({ 
    name: 'Query', 
    fields: { 
     users: { 
     type: new GraphQLList(userType), 
     args: { 
      id: {type: GraphQLString} 
     }, 
     resolve: function (_, args) { 
      if (args.id) { 
      return UserService.findOne(args.id).then(user => [user]); 
      } else { 
      return UserService.find() 
      } 
     } 
     } 
    } 
    }) 
}); 

我該如何修改用戶的類型,以返回一個列表或單個對象?

回答

4

您不應將一個字段用於不同目的。相反,做兩個領域。一個用於單個對象,另一個用於對象列表。這是更好的做法,更好地爲測試

fields: { 
    user: { 
     type: userType, 
     description: 'Returns a single user', 
     args: { 
      id: {type: GraphQLString} 
     }, 
     resolve: function (_, args) { 
      return UserService.findOne(args.id); 
     } 
    }, 
    users: { 
     type: new GraphQLList(userType), 
     description: 'Returns a list of users', 
     resolve: function() { 
      return UserService.find() 
     } 
    } 
} 
+2

你是對的,只是小幅回調,然後再(用戶=> [用戶])不需要了:) – HagaiCo

+0

我有同樣的解決方案......但在相同名稱'用戶'是不可能的? – Daniel

+0

我試圖重現你的模式,一切工作正常。試一試你的'[user]'結果中的console.log,看看你得到了什麼 – LordDave

相關問題