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

Запрос в Nest

Клиенту нужен только список строк из памяти, но тот же сервис, что и для записи, легко смешать чтение с изменением массива. Отдельный адрес не должен тянуть за собой лишний код сохранения.

Запрос - класс без побочных эффектов, который просит данные. Сервис создаёт такой объект и передаёт его QueryBus, а Nest направляет его обработчику запроса. Класс может расширять Query из пакета @nestjs/cqrs, если нужно зафиксировать тип ответа.

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

import { Query } from '@nestjs/cqrs'; export class GetPostsQuery extends Query< { title: string }[] > { constructor() { super(); } }

Сервис получает QueryBus и передаёт ей запрос при чтении списка:

import { Injectable } from '@nestjs/common'; import { CommandBus, QueryBus } from '@nestjs/cqrs'; import { CreatePostCommand } from './create-post.command.js'; import { GetPostsQuery } from './get-posts.query.js'; @Injectable() export class PostService { commandBus: CommandBus; queryBus: QueryBus; constructor(commandBus: CommandBus, queryBus: QueryBus) { this.commandBus = commandBus; this.queryBus = queryBus; } async create(title: string) { return this.commandBus.execute( new CreatePostCommand(title), ); } async findAll() { return this.queryBus.execute(new GetPostsQuery()); } }

Контроллер отдаёт список через сервис:

import { Body, Controller, Get, Post } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller('posts') export class PostController { postService: PostService; constructor(postService: PostService) { this.postService = postService; } @Get() findAll() { return this.postService.findAll(); } @Post() create(@Body('title') title: string) { return this.postService.create(title); } }

Опишите GetWorkersQuery и отправляйте его из WorkerService через QueryBus на странице списка работников.

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