如何在Nestjs代码优先中设置Apollo的cacheControl指令

way*_*mor 6 cache-control code-first graphql apollo-server nestjs

我正在尝试在某些字段上设置静态cacheControl,如此处所示

根据我的理解,我需要使用指令,因此我使用以下嵌套文档来声明指令

因此,我构建了一个 cacheControl 指令,这就是我的 GraphQLModule.forRootAsync 在 buildSchemaOptions 中的内容:

buildSchemaOptions: {
        directives: [
          new GraphQLDirective({
            name: 'cacheControl',
            locations: [
              DirectiveLocation.FIELD_DEFINITION,
              DirectiveLocation.OBJECT,
              DirectiveLocation.INTERFACE,
              DirectiveLocation.UNION
            ],
            args: {
              maxAge: { type: GraphQLInt },
              scope: {
                type: new GraphQLEnumType({
                  name: 'CacheControlScope',
                  values: {
                    PUBLIC: {
                      astNode: {
                        kind: 'EnumValueDefinition',
                        description: undefined,
                        name: {
                          kind: 'Name',
                          value: 'PUBLIC'
                        },
                        directives: []
                      }
                    },
                    PRIVATE: {
                      astNode: {
                        kind: 'EnumValueDefinition',
                        description: undefined,
                        name: {
                          kind: 'Name',
                          value: 'PRIVATE'
                        },
                        directives: []
                      }
                    }
                  }
                })
              },
              inheritMaxAge: { type: GraphQLBoolean }
            }
          })
        ]
      } 
Run Code Online (Sandbox Code Playgroud)

它确实在模式中创建了指令:

directive @cacheControl(maxAge: Int, scope: CacheControlScope, inheritMaxAge: Boolean) on FIELD_DEFINITION | OBJECT | INTERFACE | UNION

enum CacheControlScope {
  PUBLIC
  PRIVATE
}
Run Code Online (Sandbox Code Playgroud)

现在,我尝试在 @ObjectType 中的字段声明中使用它,如下所示:

import { Directive, Field, Int, ObjectType } from '@nestjs/graphql'

@ObjectType('User')
export class User {
  @Directive('@cacheControl(maxAge:60)')
  @Field(() => Int)
  id!: number

  @Directive('@cacheControl(maxAge:60)')
  @Field()
  text!: string
}
Run Code Online (Sandbox Code Playgroud)

但是,当执行一些查询来获取所有用户时,它似乎没有缓存任何内容 - 并且不会发送缓存控制标头,并且每次都会执行整个查询。我尝试做一个转换器,但不确定如何为解析器实现缓存。我缺少什么?