在 Apollo 中查找缺失的 GraphQL 解析器
Posted
技术标签:
【中文标题】在 Apollo 中查找缺失的 GraphQL 解析器【英文标题】:Find Missing GraphQL Resolvers in Apollo 【发布时间】:2020-06-27 00:53:35 【问题描述】:使用apollo-server,如果我尝试定义架构中不存在的graphql 解析器,计算机就会对我大喊大叫。
[错误:Query.foo 在解析器中定义,但不在架构中]
这很好!
是否有可能,使用阿波罗(或其他?)工具,做相反的事情?也就是说,有没有办法让 apollo 告诉我是否在我的架构中定义了查询、突变或订阅操作,但 没有 在我的解析器中定义?
【问题讨论】:
【参考方案1】:有一个可选的resolverValidationOptions
对象可以传递给makeExecutableSchema
以强制执行一些额外的解析器验证,如here 所示:
如果没有为具有参数的字段定义解析函数,requireResolversForArgs
将导致makeExecutableSchema
引发错误。 如果非标量字段没有定义解析器,requireResolversForNonScalar
将导致makeExecutableSchema
抛出错误。将此设置为true
有助于捕获错误,但默认为 false 以避免混淆来自其他 GraphQL 库的行为。requireResolversForAllFields
断言所有字段都具有有效的解析函数。requireResolversForResolveType
将需要resolveType()
方法用于接口和联合类型。这可以通过字段解析器作为 __resolveType() 传入。 False 以禁用警告。allowResolversNotInSchema
关闭在找到架构中不存在的解析器时引发错误的功能。默认为false
,以帮助捕获常见错误。
没有一个专门针对根类型上的only字段,但您可以使用一个或多个。
这些选项不会直接通过 ApolloServer 公开,但您始终可以这样做:
const schema = makeExecutableSchema( typeDefs, resolvers, resolverValidationOptions )
const apollo = new ApolloServer( schema )
【讨论】:
以上是关于在 Apollo 中查找缺失的 GraphQL 解析器的主要内容,如果未能解决你的问题,请参考以下文章
在 apollo-server 中将网关上的联合类型转换为服务 GraphQL 中的标量类型
apollo (graphQL) - 如何在查询中发送对象数组
在 apollo (graphql) 查询中无法识别 FlowRouter