如何在 neo4j-graphql-js 端点中使用带有 nestjs 框架的拦截器?
Posted
技术标签:
【中文标题】如何在 neo4j-graphql-js 端点中使用带有 nestjs 框架的拦截器?【英文标题】:How can I use interceptor in neo4j-graphql-js endpoint with nestjs framework? 【发布时间】:2020-02-11 07:15:40 【问题描述】:我正在使用 neo4j-graphql-js 库将 graphql 查询转换为密码,我需要实现一个拦截器来验证返回的内容是否属于请求它的用户。为此,我需要实现拦截器,但我遇到的问题是我没有解析器,因为它会生成利比里亚。我怎样才能让它通过拦截器?如果无法使用拦截器,有没有办法在响应中实现一个中间件?
我正在使用nestjs 框架。我使用neo4j 数据库。
谢谢。
模块:
@Module(
imports: [
GraphQLModule.forRootAsync(
useClass: GraphqlConfigService,
),
],
providers: [neo4jProvider],
)
export class GraphqlModule
configure(consumer: MiddlewareConsumer)
consumer
.apply(GraphQLAuthMiddleware,GraphQLRoleMiddleware)
.forRoutes('graphql');
@Injectable()
export class GraphqlConfigService implements GqlOptionsFactory
async createGqlOptions(): Promise<GqlModuleOptions>
const schema = buildSchema();
return
playground: true,
schema: schema,
path: '/graphql/queries',
context:
driver: neo4j.driver(
'bolt://neo4j_db:7687',
neo4j.auth.basic('neo4j', 'root')
)
;
function buildSchema(): GraphQLSchema
return makeAugmentedSchema(
typeDefs,
config:
query: true,
mutation: true
);
【问题讨论】:
【参考方案1】:您可以使用main.ts
中的app.useGlobalInterceptors(MyCustomInterceptor)
方法或在任何 模块中全局绑定您的拦截器,您可以在您的providers 数组中添加拦截器
@Module(
imports: [/* your imports*/],
providers: [
provide: APP_INTERCEPTOR,
useClass: MyCustomInterceptor
,
/* the rest of your providers*/
],
)
export class GraphqlModule
APP_INTERCEPTOR
是从 @nestjs/core
导入的。请记住,这确实会全局绑定拦截器。对您服务器的所有请求都将通过此拦截器。
【讨论】:
以上是关于如何在 neo4j-graphql-js 端点中使用带有 nestjs 框架的拦截器?的主要内容,如果未能解决你的问题,请参考以下文章