如何在不同Resolver中复用ResolveField?当前复用方式是否正确?
关于GraphQL字段解析器复用的问题解答
你这种做法完全是共享ResolveField的正确方式,核心原因和细节如下:
字段解析器与GraphQL类型绑定
你在Technology解析器中定义的@ResolveField(() => Priority, { name: 'priority' }),是直接绑定到Technology这个GraphQL类型上的——它和返回Technology的父字段(比如独立的technologies查询、columns下的technologies字段)没有绑定关系。只要某个字段返回的是Technology或[Technology]类型,GraphQL就会自动匹配并使用该类型下已注册的字段解析器。无需重复编写解析逻辑
当你的columns解析器返回[Technology]时,数组里每个Technology对象的priority字段,都会自动触发你在Technology解析器中编写的getPriority方法,不需要在columns解析器里额外为priority字段做任何处理。
举个实际执行流程的例子:
如果发起这样的查询:
query { columns { technologies { id name priority { id name } } } }
执行顺序是:
- 调用
columns解析器获取根级columns数据 - 对每个
column,调用其technologies解析器拿到[Technology]数组 - 对数组里的每个
Technology对象,调用Technology解析器中的getPriority方法,填充priority字段数据
这种基于类型绑定解析器的方式,就是NestJS GraphQL中复用字段解析逻辑的标准、高效做法。
内容的提问来源于stack exchange,提问作者Alex Tarasenko
相关产品推荐
相关产品推荐

