Открытие потока в Nest
Клиенту нужен не разовый JSON, а длинный ответ, который живёт, пока вкладка открыта. Обычная страница списка закрывается сразу после тела, и следующая порция данных снова требует нового обращения.
Метод контроллера помечают встроенной
меткой потока и возвращают
Observable с типом
MessageEvent из того же
пакета, что и HTTP декораторы.
Nest сам выставляет заголовки
потока и подписывается на
наблюдаемую последовательность
в процессе NodeJS.
Покажем на примере постов:
import { Controller, MessageEvent, Sse } from '@nestjs/common';
import { Observable, of } from 'rxjs';
@Controller('posts')
export class PostController {
@Sse('stream')
openStream(): Observable<MessageEvent> {
return of({ data: 'Posts stream opened' });
}
}
Контроллер регистрируют в корневом модуле:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
@Module({
controllers: [PostController],
})
export class AppModule {}
Оформите в WorkerController
адрес потока событий сервера,
чтобы метод возвращал
последовательность сообщений,
и подключите контроллер
к корневому модулю.