GraphQL列表或单个对象

问题描述:

我得到以下“问题”。我习惯于拥有这样的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() 
      } 
     } 
     } 
    } 
    }) 
}); 

我该如何修改用户的类型,以返回一个列表或单个对象?

您不应将一个字段用于不同目的。相反,做两个领域。一个用于单个对象,另一个用于对象列表。这是更好的做法,更好地为测试

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