当前位置:  开发笔记 > 编程语言 > 正文

GraphQL SDL枚举类型

如何解决《GraphQLSDL枚举类型》经验,为你挑选了0个好方法。

我们在SDL中定义了一堆枚举类型,它们非常适合查询和变异。在“解析器”部分中,这些映射到代表后端中那些枚举的字符串。

例如,在SDL中,我们有:

enum WRRole {
    USER
    PROVIDER
    SUPPORT
    ADMIN
    SUPER_ADMIN
    GUEST
}

在解析器部分,我们有:

WRRole: {
   USER: 'user',
   PROVIDER: 'provider',
   SUPPORT: 'support',
   ADMIN: 'admin',
   SUPER_ADMIN: 'super admin',
   GUEST: 'guest'
},

解析器使用Mongoose匹配在nodejs后端中定义的枚举值,其中该字段定义为:

...
roles: {
  type: [
    {
      type: String,
      enum: ['user', 'provider', 'support', 'admin', 'super admin', 'guest']
    }
  ],
  default: ['user']
},
...

GraphQL枚举存在的问题是,我们无法对枚举进行自省,也无法使用GraphQL自省来获取映射。

这会导致构建UI时出现问题,我们希望在其中向用户提供这些选项的下拉列表。SDL枚举值(例如SUPER_USER)非常适合这些键,但我们希望显示实际的后端映射值以供选择。

这只是我们拥有的许多枚举的一个例子。许多映射值由多个单词组成,这些单词之间有空格,或者包含SDL枚举值中不允许使用的字符(例如“ super admin”)。

所以我的问题是...你们所有人如何处理这样的事情而不必重复自己或在前端添加更多代码以将它们映射为更有用的有意义的名称以进行展示?

无法保证顺序与后端中枚举的已定义顺序匹配,因此,即使解析器知道这一点,将枚举添加到后端模型中也会严重混淆SUPER_USER实际上映射到“超级用户”的所有假设。

问候

史蒂夫

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有