Сообщение клиента в Nest
Канал уже открыт, но сервер молчит, пока не поймёт, что именно прислал клиент. Без обработчика входящих сигналов заголовок из браузера не попадёт в массив в памяти.
Метод шлюза помечают
SubscribeMessage с именем
сигнала на латинице. Параметр
с MessageBody получает
тело сообщения: строку или объект
с полями. Так сервис узнаёт текст
и может сохранить его без HTTP.
Покажем на примере постов:
import { Injectable } from '@nestjs/common';
@Injectable()
export class PostService {
posts: { title: string }[] = [];
add(title: string): { title: string } {
const post = { title };
this.posts.push(post);
return post;
}
}
Шлюз внедрит сервис и примет объект с полем заголовка:
import {
MessageBody,
SubscribeMessage,
WebSocketGateway,
} from '@nestjs/websockets';
import { PostService } from './post.service.js';
@WebSocketGateway()
export class PostGateway {
postService: PostService;
constructor(postService: PostService) {
this.postService = postService;
}
@SubscribeMessage('createPost')
handleCreatePost(@MessageBody() body: { title: string }) {
this.postService.add(body.title);
}
}
Сервис и шлюз добавим в провайдеры модуля:
import { Module } from '@nestjs/common';
import { PostGateway } from './post.gateway.js';
import { PostService } from './post.service.js';
@Module({
providers: [PostService, PostGateway],
})
export class AppModule {}
Сделайте в WorkerGateway
приём объекта с именем работника
из сообщения клиента и сохраняйте
строку через WorkerService
в массив памяти.