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

Graphql 将默认/静态值从服务器传递到客户端,graphql,react-apollo,apollo-server,Graphql,React Apollo,Apollo Server,我有一个带有两个字段的输入类型,用于过滤客户机上的查询 我想将默认值(rentIntervalLow+rentIntervalHigh)从服务器传递到客户端,但不知道如何做 下面是我当前的代码。我提出了两个天真的解决方案: 让客户机反思整个模式 拥有一个全局配置对象,并使用返回配置对象值的解析器创建一个可查询的config类型 如何使客户机可以访问服务器上的默认/配置值,还有比上述更好的建议吗 // schema.js const typeDefs = gql` input Filterin

我有一个带有两个字段的输入类型,用于过滤客户机上的查询

我想将默认值(
rentIntervalLow
+
rentIntervalHigh
)从服务器传递到客户端,但不知道如何做

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

  • 让客户机反思整个模式

  • 拥有一个全局配置对象,并使用返回配置对象值的解析器创建一个可查询的
    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。

    没有必要对整个模式进行反思,以获取有关特定类型的信息。您可以编写如下查询:

    query {
      __type(name:"FilteringOptions") {
        inputFields {
          name
          description
          defaultValue
        }
      }
    }
    
    默认值是在查询中省略特定输入值时使用的值。因此,为了利用默认值,客户端将向
    allHomes
    字段的
    input
    参数传递一个空对象。您还可以给
    input
    一个默认值
    {}
    ,这将允许客户端根本不提供
    input
    参数,同时仍然将最小和最大默认值中继到解析器


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

    无需内省整个模式来获取特定类型的信息。您可以编写如下查询:

    query {
      __type(name:"FilteringOptions") {
        inputFields {
          name
          description
          defaultValue
        }
      }
    }
    
    默认值是在查询中省略特定输入值时使用的值。因此,为了利用默认值,客户端将向
    allHomes
    字段的
    input
    参数传递一个空对象。您还可以给
    input
    一个默认值
    {}
    ,这将允许客户端根本不提供
    input
    参数,同时仍然将最小和最大默认值中继到解析器

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