提问者:小点点

阿波罗服务器错误:CountryCode.name 在解析器中定义,但不存在于国家/地区代码中


我最近升级了我的nodejs/express/graphQL项目依赖项,如下所示:

    < li >快速:从4.17.1到4.17.3 < li>apollo-server-express:从2.22.2到3.6.7 < li>graphql:从15.5.0到16.3.0

我没有在我的typedefs/解析器中更改任何内容,这些解析器在更新之前工作正常,但是现在我在从“apollo-server-express”实例化ApolloServer类时出现以下错误:

Error: CountryCode.name was defined in resolvers, but not present within CountryCode
at addResolversToSchema (/server/api/node_modules/@graphql-tools/schema/index.js:155:27)
at makeExecutableSchema (/server/api/node_modules/@graphql-tools/schema/index.js:501:14)
at ApolloServer.constructSchema (/server/api/node_modules/apollo-server-core/src/ApolloServer.ts:643:32)
at null.ApolloServerBase (/server/api/node_modules/apollo-server-core/src/ApolloServer.ts:283:18)
at null.ApolloServer (/server/api/node_modules/apollo-server-express/src/ApolloServer.ts:55:1)
at null.main (/server/api/builds/dev/api-server.js:191:22)
at processTicksAndRejections (node:internal/process/task_queues:96:5)

请注意错误消息:这不是通常的“xyz 在解析器中定义但不在 typedefs 中定义”类型的错误,在使用 graphQL 时一直发生,我知道如何修复。有趣的是,CountryCode是一个枚举,因此没有名为“name”的字段,正如错误消息所暗示的那样。下面是国家代码枚举的类型定义:

const countryCodeTypedef = gql`
  enum CountryCode { af ax al <other-country-codes> }
`

哪里

我查了一下,在我的解析器中没有. name字段的痕迹,在我的整个代码库中也没有!

如果我排除CountryCode枚举,服务器启动正常,但我的项目无法按预期工作。

在v2和v3之间的apollo-server中定义typedefs/解析器的方式是否发生了一些变化?

知道吗?


共1个答案

匿名用户

今天早上在淋浴下,我突然意识到错误的根本原因是什么!

作为升级过程的一部分,我还将“graphqlscalars”包从1.9.0升级到1.17.0,结果发现在那里添加了一个CountryCode标量,它与我自己的Enum定义相冲突。

我所要做的就是只显式导入我需要的图形QL标量(在我包含它们之前),并将冲突的Country Code标量排除在外。

来自apollo-server的更具体的错误消息,如“类型“CountryCode”的重复定义”会帮助我更快地发现错误,但事情就是这样:apollo-server和graphql只是很好的工具!