Область видимости сервиса в Nest
Если область не указана, Nest и так держит один экземпляр сервиса на всё приложение. Явная запись нужна, когда важно показать намерение в коде или рядом стоят сервисы с другими правилами.
Стандартная область через
Scope.DEFAULT ведёт себя
как синглтон: повторные обращения
к API увеличивают одни и те же поля.
Это удобно для кэша и справочников
без привязки к запросу.
Покажем на примере постов. Сервис накопит общий счётчик:
import { Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.DEFAULT })
export class PostService {
hits = 0;
touch(): string {
this.hits += 1;
return String(this.hits);
}
}
Контроллер с префиксом адреса вернёт текущее значение счётчика:
import { Controller, Get } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
postService: PostService;
constructor(postService: PostService) {
this.postService = postService;
}
@Get()
getPosts(): string {
return this.postService.touch();
}
}
Оба типа регистрируем в корневом модуле:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
@Module({
controllers: [PostController],
providers: [PostService],
})
export class AppModule {}
Сделайте WorkerService
со стандартной областью и верните
нарастающий счётчик из
WorkerController,
подключив оба типа к корневому
модулю.