РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpScDP 14 of 201 menu
◀ ▶

Долгоживущий провайдер в 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 и подключите оба типа к корневому модулю.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить