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

Область видимости контроллера в Nest

Синглтон контроллера тоже хранит поля между запросами. Если счётчик или буфер лежит прямо в контроллере, клиенты снова делят одно состояние.

Область можно указать в настройках @Controller: тогда Nest создаёт новый экземпляр контроллера на каждый запрос, так же как для сервиса с областью запроса.

Путь адреса задают полем path, область - полем scope с тем же перечислением Scope. Сервис при этом может оставаться синглтоном.

Покажем на примере постов. Контроллер будет вести счётчик:

import { Controller, Get, Scope } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller({ path: 'posts', scope: Scope.REQUEST }) export class PostController { hits = 0; postService: PostService; constructor(postService: PostService) { this.postService = postService; } @Get() getPosts(): string { this.hits += 1; return `${this.hits}:${this.postService.getLabel()}`; } }

Сервис вернёт метку времени создания, чтобы видеть отдельный объект сервиса на запрос:

import { Injectable, Scope } from '@nestjs/common'; @Injectable({ scope: Scope.REQUEST }) export class PostService { born = Date.now(); getLabel(): string { return String(this.born); } }

Оба типа регистрируем в корневом модуле:

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 {}

Сделайте WorkerController с областью на один запрос и верните счётчик вместе с меткой из WorkerService, подключив оба типа к корневому модулю.

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