A progressive Node.js framework for building efficient and scalable server-side applications.
NPM Version Package License NPM Downloads Discord Backers on Open Collective Sponsors on Open Collective
Elasticsearch module for Nest based on the official @elastic/elasticsearch package.
$ npm i --save @nestjs/elasticsearch @elastic/elasticsearch
Import ElasticsearchModule:
@Module({ imports: [ElasticsearchModule.register({ node: 'http://localhost:9200', })], providers: [...], }) export class SearchModule {}
Inject ElasticsearchService:
@Injectable() export class SearchService { constructor(private readonly elasticsearchService: ElasticsearchService) {} }
Quite often you might want to asynchronously pass your module options instead of passing them beforehand. In such case, use registerAsync() method, that provides a couple of various ways to deal with async data.
1. Use factory
ElasticsearchModule.registerAsync({ useFactory: () => ({ node: 'http://localhost:9200' }) });
Obviously, our factory behaves like every other one (might be async and is able to inject dependencies through inject).
ElasticsearchModule.registerAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ node: configService.get('ELASTICSEARCH_NODE'), }), inject: [ConfigService], }),
2. Use class
ElasticsearchModule.registerAsync({ useClass: ElasticsearchConfigService });
Above construction will instantiate ElasticsearchConfigService inside ElasticsearchModule and will leverage it to create options object.
class ElasticsearchConfigService implements ElasticsearchOptionsFactory { createElasticsearchOptions(): ElasticsearchModuleOptions { return { node: 'http://localhost:9200' }; } }
3. Use existing
ElasticsearchModule.registerAsync({ imports: [ConfigModule], useExisting: ConfigService, }),
It works the same as useClass with one critical difference - ElasticsearchModule will lookup imported modules to reuse already created ConfigService, instead of instantiating it on its own.
The ElasticsearchService wraps the Client from the official @elastic/elasticsearch methods. The ElasticsearchModule.register() takes options object as an argument, read more.
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.
- Author - Kamil Myśliwiec
- Website - https://nestjs.com
- Twitter - @nestframework
Nest is MIT licensed.