Skip to content

Latest commit

 

History

History
133 lines (119 loc) · 3.3 KB

README.md

File metadata and controls

133 lines (119 loc) · 3.3 KB

Nest Logo

nestjs-opensearch

OpenSearch module for NestJS framework
Installation · Usage · Issues
NPM Version Package License NPM Downloads


Installation

For NPM:

$ npm i --save nestjs-opensearch @opensearch-project/opensearch

For Yarn:

$ yarn add nestjs-opensearch @opensearch-project/opensearch

Module configuration

Module for single connection:

import { OpensearchModule } from 'nestjs-opensearch';

@Module({
  imports: [
    OpensearchModule.forRoot({
      node: 'https://*****.es.amazonaws.com',
    }),
  ],
  providers: (...),
})
export class SearchModule { }

Module for multiple connections:

import { OpensearchModule } from 'nestjs-opensearch';

@Module({
  imports: [
    OpensearchModule.forRoot({
      clientName: 'foo',
      node: 'https://*****.es.amazonaws.com',
    }),
    OpensearchModule.forRoot({
      clientName: 'bar',
      node: 'https://*****.es.amazonaws.com',
    }),
  ],
  providers: (...),
})
export class SearchModule { }

Module for async configuration using useFactory:

import { OpensearchModule } from 'nestjs-opensearch';

@Module({
  imports: [
    OpensearchModule.forRootAsync({
      clientName: 'baz',
      // See also: https://docs.nestjs.com/techniques/configuration
      imports: [ ConfigModule ],
      inject: [ ConfigService ],
      useFactory: (configService) => ({
        node: configService.get<string>('opensearch.node'),
      }),
    }),
  ],
  providers: (...),
})
export class SearchModule { }

Module for async configuration using useClass:

import type { ClientOptions } from '@opensearch-project/opensearch';
import { OpensearchModule, OpensearchClientOptionsFactory } from 'nestjs-opensearch';

@Injectable()
export class OpensearchConfigService implements OpensearchClientOptionsFactory {
  public async createOpensearchClientOptions(): Promise<ClientOptions> {
    const configs = await fetch(...);
    return {
      node: configs.node,
    };
  }
}

@Module({
  imports: [
    OpensearchModule.forRootAsync({
      clientName: 'qux',
      useClass: OpensearchConfigService,
    }),
  ],
  providers: (...),
})
export class SearchModule { }

Client usage

import { InjectOpensearchClient, OpensearchClient } from 'nestjs-opensearch';

@Injectable()
export class SearchService {
  public constructor(
    // Inject the default client
    private readonly searchClient: OpensearchClient,

    // Also inject the default client
    @InjectOpensearchClient()
    private readonly alsoSearchClient: OpensearchClient,

    // Inject the 'foo' named client
    @InjectOpensearchClient('foo')
    private readonly fooSearchClient: OpensearchClient,
  ) { }
}