【问题标题】:Can an enum return description (string) in GraphQL?枚举可以在 GraphQL 中返回描述(字符串)吗?
【发布时间】:2018-10-24 08:24:41
【问题描述】:

我正在为我的 GraphQL API 苦苦挣扎,因为我需要利用枚举,同时将它们的完整描述保留在前端。

简而言之: 我对产品有不同的状态:"Has been sent""Not sent yet""Received"。 所以这是使用 Enums 的正确地方:

enum ProductState {
  HAS_BEEN_SENT
  NOT_SENT_YET
  RECEIVED
}

但我需要在前端显示正确的字符串(“Has been sent”,而不是“HAS_BEEN_SENT”)。

我不能使用简单的解决方案作为“用空格替换下划线并将字符串小写”,因为我的 API 不是英文而是法文(所以我有重音和特殊字符)。

枚举不能返回字符串吗?还是一个物体? 我尝试了指令,但无法让它工作......

其实我并不关心它在数据库中是如何写的(大写或小写形式),也不在 GraphQL API 中。我只需要我的客户以“法语”形式访问不同的产品状态。

【问题讨论】:

    标签: graphql graphql-js


    【解决方案1】:

    据我所知,在 GRAPHQL 中定义枚举只有一种受支持的语法,这就是您正在使用的语法。 您不能将枚举与字符串值相关联。

    #NOTE: I would probably use a more descriptive name as opposed to ProductState
    enum AllowedProductStatus { 
      HAS_BEEN_SENT
      NOT_SENT_YET
      RECEIVED
    }
    

    但是,如果您使用 apollo 服务器,您可以使用解析器添加自定义值。

    const resolvers = {
      AllowedProductStatus: {
        HAS_BEEN_SENT: "Has been sent", 
        NOT_SENT_YET: "Not sent yet", 
        RECEIVED: "Received"
      }
    };
    

    或者,如果你只是想让它独一无二,你也可以使用指令@unique

    type Product {
      status: String! @unique
    }
    
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      相关资源
      最近更新 更多