Инициализация модуля в Nest
Пусть текст списка должен быть готов до первого запроса. Писать его в методе страницы поздно для подготовки: к открытию адреса данные уже нужны, а метод ещё никто не вызывал.
У модуля есть момент инициализации.
Он наступает, когда зависимости модуля
уже собраны, а запросы ещё не приходят.
На сервис вешают метод onModuleInit.
Фреймворк вызовет его сам. Интерфейс
OnModuleInit задаёт этот метод,
чтобы у класса был нужный вид.
Покажем на примере постов. При инициализации сервис запишет текст списка в поле:
import { Injectable, OnModuleInit } from '@nestjs/common';
@Injectable()
export class PostService implements OnModuleInit {
private label = '';
onModuleInit() {
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 отдавала
эти данные. Модуль работников
подключите к корневому.