从服务器到客户端传递默认/静态值

时间:2019-08-19 11:50:25

标签: graphql react-apollo apollo-server

我有一个输入类型,其中有两个字段用于过滤客户端上的查询。

我想将服务器的默认值(rentIntervalLow + rentIntervalHigh传递给客户端,但不知道该怎么做。

下面是我当前的代码。我提出了两个简单的解决方案:

  1. 让客户端自省整个架构。

  2. 具有一个全局配置对象,并使用可返回配置对象值的解析器创建一个可查询的Config类型。

有什么比上述更好的建议,如何使客户端可以访问服务器上的默认/配置值?

// schema.js
const typeDefs = gql`
  input FilteringOptions {
    rentIntervalLow: Int = 4000
    rentIntervalHigh: Int = 10000
  }

  type Home {
    id: Int
    roomCount: Int
    rent: Int
  }

  type Query {
    allHomes(first: Int, cursor: Int, input: FilteringOptions): [Home]
  }
`

export default typeDefs

我正在使用Apollo Server 2.8.1和Apollo React 3.0。

1 个答案:

答案 0 :(得分:2)

不必对整个模式进行内部检查来获取有关特定类型的信息。您可以只写一个查询:

query {
  __type(name:"FilteringOptions") {
    inputFields {
      name
      description
      defaultValue
    }
  }
}

默认值是当查询中省略一个特定输入值时将使用的值。因此,要利用默认值,客户端会将空对象传递到input字段的allHomes参数。您还可以为input提供默认值{},这将允许客户端完全不提供input参数,同时仍将最小和最大默认值中继到解析程序。

但是,如果您的目的是为客户端提供最小值和最大值以驱动某些客户端特定的逻辑(例如验证,下拉菜单值等),那么您不应将默认值用于这个。相反,客户端应使用例如您建议的Config类型直接查询此信息。