把写好的 GraphQL 查询交给 GraphQL 服务去处理的时候,GraphQL 服务会根据查询里的字段,执行对应的 Resolve 函数或者方法。
比如在这个用户查询里面,用了 user 这个字段,在 GraphQL 服务那里需要设置一下跟这个字段对应的 Resolver 。在我们的 Nest 框架里面,这些 Resolve 方法可以放在一个 Resolver 类里面,
然后再用不同的装饰器,把字段跟 Resolve 方法对接到一块儿。
比如刚才我们在查询里用的 user 字段,跟它对应的 Resolve 方法就是这个 UserResolver 里面的 getUser 这个方法。
也就是如果在查询里包含了 user 这个字段,GraphQL 收到查询之后就会执行这个 getUser 方法,这个方法做的事情是根据用户的 id 获取到对应的用户数据。
继续再看这个查询,GraphQL 服务 Resolve 了 user 字段以后,得到了一个用户数据,继续 Resolve 在这个查询里面选择的其它的字段,看到 name 字段,直接把之前 Resolve 的 user 对象里的 name 的值交给这个字段。
然后 Resolve 的是 posts 字段,这个字段我们给它添加了一个 Resolver ,所以 GraphQL 会执行这个 Resolve 方法。
这里就是 UserResolver 里的这个 getUserPosts 这个方法,在这个方法里,我们用 @Parent 装饰器获取到了 Resolve user 字段以后得到的那个用户对象,把它交给了这个 Resolve 方法的 user 参数。
这样在这个方法里可以利用一下这个 user 对象的值,这里我们做的就是根据这个 user 的值,获取到了一组跟这个用户相关的内容列表。
我们在查询里继续又选择了 Post 类型里的 id 还有 title。 所有字段全部都 Resolve 了以后,GraphQL 就会把生产出来的数据响应给客户端。