Graphql
插件
学习如何在 NestJS GraphQL 中使用插件来扩展 GraphQL 功能,包括内置插件和自定义插件的创建与配置。
插件
插件使您能够通过添加自定义业务逻辑来扩展 Apollo Server 的核心功能。例如,插件可以执行身份验证、日志记录、缓存和错误处理。要使用现有插件或创建自定义插件,请将其传递给 GraphQLModule 的 plugins 属性。
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
typePaths: ['./**/*.graphql'],
plugins: [ApolloServerPluginLandingPageLocalDefault()],
}),
缓存
缓存是一种提高应用程序性能的技术。Apollo Server 提供了一个内存缓存实现。
要启用缓存,请将 cache 属性传递给 GraphQLModule 的 forRoot() 方法。
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
typePaths: ['./**/*.graphql'],
cache: 'bounded',
}),
自定义插件
要创建自定义插件,请声明一个实现 ApolloServerPlugin 接口的类。
import { ApolloServerPlugin, GraphQLRequestListener } from '@apollo/server';
import { Plugin } from '@nestjs/apollo';
@Plugin()
export class LoggingPlugin implements ApolloServerPlugin {
requestDidStart(): GraphQLRequestListener<any> {
console.log('Request started');
return {
willSendResponse() {
console.log('Will send response');
},
};
}
}
有了这个,我们可以在提供者数组中注册 LoggingPlugin。
@Module({
providers: [LoggingPlugin],
})
export class CommonModule {}
Nest 将自动实例化插件并将其应用于 Apollo Server。
或者,插件可以通过传递给 plugins 属性来内联定义:
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
typePaths: ['./**/*.graphql'],
plugins: [
{
requestDidStart() {
console.log('Request started');
return {
willSendResponse() {
console.log('Will send response');
},
};
},
},
],
}),
了解更多关于创建插件的信息,请访问 Apollo 文档。
使用第三方插件
有几个现成的插件可用。要使用现有插件,只需导入它并将其添加到 plugins 数组中:
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
typePaths: ['./**/*.graphql'],
plugins: [ApolloServerPluginLandingPageLocalDefault()],
}),
ApolloServerPluginLandingPageLocalDefault 插件从 @apollo/server/plugin/landingPage/default 包导入。