我最近升级了我的nodejs/express/graphQL项目依赖项,如下所示:
我没有在我的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/解析器的方式是否发生了一些变化?
知道吗?
今天早上在淋浴下,我突然意识到错误的根本原因是什么!
作为升级过程的一部分,我还将“graphqlscalars”包从1.9.0升级到1.17.0,结果发现在那里添加了一个CountryCode标量,它与我自己的Enum定义相冲突。
我所要做的就是只显式导入我需要的图形QL标量(在我包含它们之前),并将冲突的Country Code标量排除在外。
来自apollo-server的更具体的错误消息,如“类型“CountryCode”的重复定义”会帮助我更快地发现错误,但事情就是这样:apollo-server和graphql只是很好的工具!