У меня есть приложение NestJs, которое использует два сервиса. DbService, который подключается к Db, и SlowService, который работает довольно медленно и использует внедренный DbService.
Теперь приложение должно предоставлять маршруты работоспособности вне базового пути API, поэтому мне нужен другой модуль, который предоставляет контроллеры для маршрутов работоспособности.
Я создал базовый модуль.
import { Module } from '@nestjs/common'
import { SlowService } from './slow.service'
import { DbService } from './db.service'
@Module({
imports: [],
controllers: [],
providers: [DbService, SlowService],
exports: [DbService, SlowService]
})
export class BaseModule {
}
ApiModule и HealthModule теперь импортируют базовый модуль, чтобы иметь возможность использовать сервисы.
imports: [BaseModule],
Есть только небольшая проблема. Кажется, что оба модуля создают свой собственный экземпляр службы, но мне нужно, чтобы он был одним и тем же. Я предполагаю это, потому что console.log из конструктора появляются дважды при запуске приложения. Я пропускаю настройку или что-то?
UPDATE
Вот мой метод начальной загрузки, так что вы можете увидеть, как я инициализирую модули.
async function bootstrap (): Promise<void> {
const server = express()
const api = await NestFactory.create(AppModule, server.application, { cors: true })
api.setGlobalPrefix('api/v1')
await api.init()
const options = new DocumentBuilder()
.setTitle('...')
.setLicense('MIT', 'https://opensource.org/licenses/MIT')
.build()
const document = SwaggerModule.createDocument(api, options)
server.use('/swaggerui', SwaggerUI.serve, SwaggerUI.setup(document))
server.use('/swagger', (req: express.Request, res: express.Response, next?: express.NextFunction) => res.send(document))
const health = await NestFactory.create(HealthModule, server.application, { cors: true })
health.setGlobalPrefix('health')
await health.init()
http.createServer(server).listen(Number.parseInt(process.env.PORT || '8080', 10))
}
const p = bootstrap()