Обработчик запроса в Nest
Запрос уже уходит в шину, но без класса, который знает, где лежит массив, ответ так и останется пустым. Чтение должно жить отдельно от команды записи.
Обработчик запроса
- класс с пометкой
@QueryHandler,
который реализует
IQueryHandler
и только возвращает данные.
Его регистрируют в провайдерах
рядом с обработчиком команды
и общим хранилищем в памяти.
Покажем на примере постов:
import { IQueryHandler, QueryHandler } from '@nestjs/cqrs';
import { GetPostsQuery } from './get-posts.query.js';
import { PostMemory } from './post.memory.js';
@QueryHandler(GetPostsQuery)
export class GetPostsHandler
implements IQueryHandler<GetPostsQuery>
{
postMemory: PostMemory;
constructor(postMemory: PostMemory) {
this.postMemory = postMemory;
}
async execute(query: GetPostsQuery) {
return this.postMemory.posts;
}
}
Корневой модуль добавляет обработчик запроса к уже известным провайдерам:
import { Module } from '@nestjs/common';
import { CqrsModule } from '@nestjs/cqrs';
import { PostController } from './post.controller.js';
import { CreatePostHandler } from './create-post.handler.js';
import { GetPostsHandler } from './get-posts.handler.js';
import { PostMemory } from './post.memory.js';
import { PostService } from './post.service.js';
@Module({
imports: [CqrsModule.forRoot()],
controllers: [PostController],
providers: [
PostMemory,
PostService,
CreatePostHandler,
GetPostsHandler,
],
})
export class AppModule {}
Зарегистрируйте
GetWorkersHandler,
который возвращает массив
из WorkerMemory
для GetWorkersQuery.