Как я могу использовать перехватчик в конечной точке neo4j-graphql-js со структурой nestjs? - PullRequest
1 голос
/ 14 октября 2019

Я использую библиотеку neo4j-graphql-js для перевода запросов graphql в cypher, и мне нужно реализовать перехватчик, чтобы убедиться, что возвращаемое принадлежит тому пользователю, который его запрашивает. Для этого мне нужно реализовать перехватчик, но у меня проблема в том, что у меня нет резолверов, поскольку он генерирует либерию. Как я могу сделать это через перехватчик? Если перехватчик не может быть использован, есть ли способ реализовать промежуточное ПО в ответе?

Я использую фреймворк 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 голосов
/ 14 октября 2019

Вы можете связать ваш перехватчик глобально, используя метод app.useGlobalInterceptors(MyCustomInterceptor) в вашем main.ts или любом модуле, вы можете добавить перехватчик в массиве ваших провайдеров

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

APP_INTERCEPTOR импортируется из @nestjs/core. Имейте в виду, это связывает перехватчик во всем мире. Все запросы к вашему серверу будут проходить через этот перехватчик.

...