如何在带有Nestjs框架的neo4j-graphql-js端点中使用拦截器?

时间:2019-10-14 16:18:14

标签: javascript neo4j graphql interceptor nestjs

我正在使用neo4j-graphql-js库将graphql查询转换为密码,并且我需要实现一个拦截器来验证返回的内容是否属于请求它的用户。为此,我需要实现拦截器,但是存在的问题是我没有解析器,因为它生成了liberia。如何使其通过拦截器?如果无法使用拦截器,是否可以在响应中实现中间件?

我正在使用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 个答案:

答案 0 :(得分:0)

您可以使用app.useGlobalInterceptors(MyCustomInterceptor)中的main.ts方法或在任何模块中将{interceptor}全局绑定到您可以在提供程序数组中添加拦截器

@Module({
  imports: [/* your imports*/],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: MyCustomInterceptor
    },
    /* the rest of your providers*/
  ],
})
export class GraphqlModule {}

APP_INTERCEPTOR是从@nestjs/core导入的。请记住,这确实会全局绑定拦截器。对服务器的所有请求都将通过此拦截器。