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

Ответ на сообщение в Nest

Запрос уходит по TCP, но страница не получает сохранённую строку: обработчик только меняет массив и ничего не отдаёт назад. Клиент ждёт поток, а завершения с данными не происходит.

Если метод на стороне слушателя возвращает объект или массив, Nest упаковывает значение в ответ на запрос. В веб процессе сервис преобразует поток клиента в обычное значение через firstValueFrom из RxJS и передаёт его контроллеру страницы. Так HTTP клиент видит тот же результат, что лежит в памяти удалённого класса.

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

import { Controller } from '@nestjs/common'; import { MessagePattern, Payload } from '@nestjs/microservices'; @Controller() export class PostMicroserviceController { posts: { title: string }[] = []; @MessagePattern({ cmd: 'add_post' }) addPost(@Payload() data: { title: string }) { const post = { title: data.title }; this.posts.push(post); return post; } }

Клиентский сервис дождётся объекта из удалённого класса:

import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; import { firstValueFrom } from 'rxjs'; @Injectable() export class PostClientService { client: ClientProxy; constructor(@Inject('POST_SERVICE') client: ClientProxy) { this.client = client; } async addPost(title: string) { return firstValueFrom( this.client.send({ cmd: 'add_post' }, { title }), ); } }

Страница примет заголовок и вернёт ответ канала:

import { Body, Controller, Post } from '@nestjs/common'; import { PostClientService } from './post.client.service.js'; @Controller('posts') export class PostController { postClientService: PostClientService; constructor(postClientService: PostClientService) { this.postClientService = postClientService; } @Post() async create(@Body('title') title: string) { return this.postClientService.addPost(title); } }

Измените WorkerMicroserviceController так, чтобы после сохранения данных работника возвращалась та же строка, а WorkerClientService и WorkerController отдавали её HTTP клиенту.

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