You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Server 2 Beta中枚举解析器报错问题求助

问题原因及解决办法

这个报错的核心原因是Apollo Server 2 Beta会自动根据你写的SDL(也就是gql标签里的Schema)生成枚举类型,不需要你手动在resolvers里创建GraphQLEnumType实例,你手动添加的枚举解析器反而和自动生成的类型产生了冲突。

具体来说:

  • 当你在SDL里定义了enum Travaux { ins val ech },Apollo Server会自动帮你生成对应的GraphQLEnumType,并把这个类型和Schema绑定。
  • 你手动在resolvers里又创建了一个同名的Travaux枚举类型,这就导致Apollo Server识别混乱——它发现resolvers里有一个Travaux,但这个实例和它从SDL生成的不是同一个,所以抛出了“Travaux.name was defined in resolvers, but enum is not in schema”的错误(本质是冲突,不是真的不在schema里)。

那如果想要给枚举值映射自定义的实际值(比如ins对应'en instruction'),正确的做法是在resolvers里直接给枚举类型设置键值对,不需要创建GraphQLEnumType,示例如下:

const resolvers = {
  // 其他解析器...
  Travaux: {
    ins: 'en instruction',
    val: 'valide',
    ech: 'échu'
  }
}

这样既保留了SDL里的枚举结构定义,又能自定义枚举值的实际映射,还不会和Apollo自动生成的类型冲突。

内容的提问来源于stack exchange,提问作者François Romain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:19:31