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