Инициализация приложения в Nest
Пусть данные списка нужны, когда собрано уже всё приложение, а не одна его часть. Порт в эту секунду ещё закрыт, страницу открыть нельзя, зато подготовку закончить можно.
Этот момент ловит метод
onApplicationBootstrap.
К его вызову каждый модуль
приложения уже инициализирован,
а соединения фреймворк ещё не слушает.
Метод вешают на сервис. Интерфейс
OnApplicationBootstrap задаёт
его вид, и Nest вызывает метод сам.
Покажем на примере постов. Сервис запишет текст списка, когда приложение собрано:
import { Injectable, OnApplicationBootstrap } from '@nestjs/common';
@Injectable()
export class PostService implements OnApplicationBootstrap {
private label = '';
onApplicationBootstrap() {
this.label = 'All posts';
}
getPosts(): string {
return this.label;
}
}
Контроллер вернёт подготовленный текст:
import { Controller, Get } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
constructor(private postService: PostService) {}
@Get()
getPosts(): string {
return this.postService.getPosts();
}
}
Оба класса запишем в модуль постов:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
@Module({
controllers: [PostController],
providers: [PostService],
})
export class PostsModule {}
Корневой модуль подключает модуль постов:
import { Module } from '@nestjs/common';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [PostsModule],
})
export class AppModule {}
Заполните данные списка в сервисе
WorkerService, когда все модули
приложения уже инициализированы,
и отдайте их страницей контроллера
WorkerController. Модуль
работников подключите к корневому.