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

Обработчик команды в Nest

Команда уже уходит в шину, но массив всё ещё может жить в сервисе страницы, и граница между HTTP слоем и изменением состояния размывается. Повторная запись с другого места снова тянет копирование.

Обработчик команды - отдельный класс с пометкой @CommandHandler, который реализует ICommandHandler и содержит код записи. Его регистрируют в провайдерах модуля, Nest связывает тип команды с этим классом при старте процесса NodeJS.

Покажем на примере постов:

import { Injectable } from '@nestjs/common'; @Injectable() export class PostMemory { posts: { title: string }[] = []; }

Обработчик достаёт заголовок из команды и добавляет объект в общий массив:

import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; import { CreatePostCommand } from './create-post.command.js'; import { PostMemory } from './post.memory.js'; @CommandHandler(CreatePostCommand) export class CreatePostHandler implements ICommandHandler<CreatePostCommand> { postMemory: PostMemory; constructor(postMemory: PostMemory) { this.postMemory = postMemory; } async execute(command: CreatePostCommand) { const post = { title: command.title }; this.postMemory.posts.push(post); return post; } }

Корневой модуль подключает шину, память, обработчик и сервис, который только отправляет команду:

import { Module } from '@nestjs/common'; import { CqrsModule } from '@nestjs/cqrs'; import { PostController } from './post.controller.js'; import { CreatePostHandler } from './create-post.handler.js'; import { PostMemory } from './post.memory.js'; import { PostService } from './post.service.js'; @Module({ imports: [CqrsModule.forRoot()], controllers: [PostController], providers: [ PostMemory, PostService, CreatePostHandler, ], }) export class AppModule {}

Вынесите запись работника в CreateWorkerHandler, храните список в WorkerMemory и зарегистрируйте оба класса в корневом модуле рядом с WorkerService.

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