Я использую инфраструктуру Nestjs для разработки своего приложения Elastic Service. Я использую библиотеку '@ nestjs /asticsearch' внутри своего кода, и я просто пытаюсь установить соединение с базой данных и использовать внутри всех других модулей. Пожалуйста, найдите мой пример кода здесь.
Мой модуль приложения выглядит ниже
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from './config/config.module';
import { DatabaseModule } from './database/database.module';
import { LayoutmgmtModule } from './layoutmgmt/layoutmgmt.module';
@Module({
imports: [ConfigModule,DatabaseModule, LayoutmgmtModule],
controllers: [AppController],
providers: [AppService]
})
export class AppModule {}
Мой модуль базы данных:
import { Module } from '@nestjs/common';
import { ElasticsearchModule } from '@nestjs/elasticsearch';
import {ConfigModule} from '../config/config.module';
import {ConfigService} from '../config/config.service';
import {DatabaseService} from './database.service';
@Module({
imports:[ElasticsearchModule.registerAsync({
imports:[ConfigModule],
useFactory: async (configService: ConfigService) => ({
host: configService.get('ELASTIC_URL'),
log: 'trace',
requestTimeout: 3000
}),
inject:[ConfigService]
})],
providers:[DatabaseService],
})
export class DatabaseModule {}
Моя служба базы данных:
import { Injectable,HttpException } from '@nestjs/common';
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { Client } from 'elasticsearch';
@Injectable()
export class DatabaseService {
private readonly esClient:Client;
constructor(private readonly elasticsearchService: ElasticsearchService) {
try {
this.esClient = elasticsearchService.getClient();
this.esClient.ping({ requestTimeout: 3000 },function(err,res,status){
if (err || !(res)) {
console.log('Unable to connect to the server. Please start the server. Error:', err);
throw new HttpException({
status: 'error',
message: 'Unable to connect to the server. Please start the server. Error:'
}, 500);
} else {
console.log('Connected to Server successfully!',res, status);
}
});
}
catch(err) {
console.log('Error in connection' + err);
throw new HttpException({
status: 'error',
message: 'Unable to reach Elasticsearch cluster'
}, 500);
}
}
}
Теперь выше я без проблем инициализировал соединение и его подключение к базе данных, но я пытаюсь повторно использовать ElasticsearchService в другом модуле / сервисе, называемом модулем макета
Модуль макета выглядит ниже
import { Module } from '@nestjs/common';
import { LayoutmgmtController } from './layoutmgmt.controller';
import { LayoutmgmtService } from './layoutmgmt.service';
@Module({
controllers: [LayoutmgmtController],
providers: [LayoutmgmtService],
})
export class LayoutmgmtModule {}
Служба компоновки Смотри ниже
import { Inject, Injectable, Dependencies } from '@nestjs/common';
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { Client } from 'elasticsearch';
@Injectable()
export class LayoutmgmtService {
private readonly esClient:Client;
constructor(@Inject(ElasticsearchService) private readonly elasticsearchService: ElasticsearchService) {
this.esClient = elasticsearchService.getClient();
if (!this.esClient){
console.log("Elastic alreayd connected")
}
}
}
Если я использую ElasticSErachService в службе выше в конструкторе, я получаю приведенную ниже ошибку, я хочу повторно использовать существующее соединение ..
[Nest] 10724 - 14.10.2015, 16:50:41 [ExceptionHandler] Nest не может разрешить зависимости LayoutmgmtService (?). Пожалуйста, убедитесь, что аргумент в index [0] доступен в контексте LayoutmgmtModule. + 40 мс Ошибка: Nest не может разрешить зависимости LayoutmgmtService (?). Пожалуйста, убедитесь, что аргумент в index [0] доступен в контексте LayoutmgmtModule. в Injector.lookupComponentInExports (C: \ Subu \ Elastic \astic-nest-js \ node_modules @ nestjs \ core \ injector \ injector.js: 183: 19) в process._tickCallback (внутренний / process / next_tick.js: 68: 7) в Function.Module.runMain (внутренняя / modules / cjs / loader.js: 744: 11) в объекте. (C: \ Subu \ Elastic \astic-nest-js \ node_modules \ ts-node \ src \ bin.ts: 158: 12) в Module._compile (внутренний / modules / cjs / loader.js: 688: 30) вObject.Module._extensions..js (внутренние / modules / cjs / loader.js: 699: 10) в Module.load (внутренние / modules / cjs / loader.js: 598: 32) в tryModuleLoad (внутренние / modules / cjs)/loader.js:537:12) в Function.Module._load (внутренний / modules / cjs / loader.js: 529: 3) в Function.Module.runMain (внутренний / modules / cjs / loader.js: 741: 12)