OpenSearch module for NestJS framework
Installation
·
Usage
·
Issues
For NPM:
$ npm i --save nestjs-opensearch @opensearch-project/opensearch
For Yarn:
$ yarn add nestjs-opensearch @opensearch-project/opensearch
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 { }
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,
) { }
}