插件能够通过响应特定事件执行自定义操作来扩展 Apollo Server 的核心功能。目前这些事件对应 GraphQL 请求生命周期的各个阶段,以及 Apollo Server 自身的启动过程(详见此处 )。例如,一个基础日志插件可以记录发送到 Apollo Server 的每个请求所关联的 GraphQL 查询字符串。
要创建插件,需声明一个用 @Plugin 装饰器标注的类,该装饰器从 @nestjs/apollo 包导出。同时,为了获得更好的代码自动补全功能,建议实现来自 @apollo/server 包的 ApolloServerPlugin 接口。
这样我们就可以将 LoggingPlugin 注册为一个提供者。
Nest 会自动实例化插件并将其应用到 Apollo Server。
系统提供了多个开箱即用的插件。要使用现有插件,只需导入它并将其添加到 plugins 数组中:
ApolloServerOperationRegistry 插件是从 @apollo/server-plugin-operation-registry 包导出的。
部分现有的 mercurius 专属 Fastify 插件必须在 mercurius 插件之后加载(详见插件树此处 )。
mercurius-upload 是个例外,应在主文件中注册。
为此,MercuriusDriver 提供了一个可选的 plugins 配置项。它表示一个由对象组成的数组,每个对象包含两个属性:plugin 及其对应的 options。因此,注册 缓存插件 的示例如下: