Долгоживущий провайдер в Nest
Обычный провайдер с областью запроса исчезает, когда ответ отправлен. Иногда тот же объект нужен чуть дольше: например, несколько шагов внутри одного сценария делят данные.
Долгоживущий режим в @Injectable
оставляет экземпляр живым дольше
одного запроса, пока совпадает
контекст, который задаёт Nest.
Снаружи это по-прежнему область
запроса, но объект не сбрасывается
сразу после ответа.
Покажем на примере постов. Сервис запомнит метку при создании:
import { Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST, durable: true })
export class PostService {
born = Date.now();
getBorn(): string {
return String(this.born);
}
}
Контроллер с префиксом адреса вернёт метку из внедрённого сервиса:
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.getBorn();
}
}
Оба типа регистрируем в корневом модуле:
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 и
подключите оба типа к корневому
модулю.