【问题标题】:GraphQL - show list or single objectGraphQL - 显示列表或单个对象
【发布时间】:2017-07-08 07:50:18
【问题描述】:

我已经设法通过 GraphQL 获得以下数据:

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

我有 QueryType、CityType 和 UserType。在我的 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

【问题讨论】:

    标签: node.js express graphql


    【解决方案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) {
        ...
      }
    }
    

    【讨论】:

    • 谢谢,实际上我将用户查询添加到我的CityType 对象,而不是我的主要Query 对象。它有效,但我硬编码了获取 url,因为我不知道如何将 city_id 传递给我的UserType。我的单用户网址如下所示:/cities/:city_id/users/:user_id
    • 您只需将city_id 作为另一个参数添加到查询中。然后使用user(cityId: $city_id, id: $id) - 两个参数都可以在args 中使用,所以你仍然可以只使用db.users.findOne(args)
    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2018-10-20
    • 2019-04-20
    • 2010-09-28
    • 2018-12-02
    • 2017-09-03
    • 2018-09-22
    • 2019-12-14
    相关资源
    最近更新 更多