枚举可以在GraphQL中返回描述(字符串)吗?

时间:2018-05-14 15:47:24

标签: graphql graphql-js

我正在努力使用我的GraphQL API,因为我需要利用Enums,同时在前端保留完整的描述。

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

enum ProductState {
  HAS_BEEN_SENT
  NOT_SENT_YET
  RECEIVED
}

但我需要在前端显示正确的字符串(" Has been sent",而不是" HAS_BEEN_SENT&#34 ;)

我无法使用简单的解决方案作为"用空格替换下划线并用字母小写字母"因为我的API不是英文的,而是法文的(因此我有重音和特殊字符)。

Enum能否返回一个字符串?还是一个对象? 我试过指令但不可能让它工作......

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

1 个答案:

答案 0 :(得分:0)

据我所知,在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
}

希望这很有帮助。