【发布时间】:2019-11-04 01:35:58
【问题描述】:
我想创建仅用于 WebSocket (/api/events) 的特定 API 路由,但在所有在 Nest.js 上实现 WebSockets 的示例中,我偶然发现模块是在 AppModule 中导入的,并且客户端正在向根 URL,我不能这样做,因为我有这个中间件;
frontend.middleware.ts
import { Request, Response } from 'express';
import { AppModule } from '../../app.module';
export function FrontendMiddleware(
req: Request,
res: Response,
next: Function,
) {
const { baseUrl } = req;
if (baseUrl.indexOf('/api') === 0) {
next();
} else {
res.sendFile('index.html', { root: AppModule.getStaticAssetsRootPath() });
}
}
这里是EventGateway 和EventModule:
event.gateway.ts
import {
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
WsResponse,
} from '@nestjs/websockets';
import { from, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Client, Server } from 'socket.io';
@WebSocketGateway({ namespace: 'events' })
export class EventGateway {
@WebSocketServer()
server: Server;
@SubscribeMessage('events')
findAll(client: Client, data: any): Observable<WsResponse<number>> {
return from([1, 2, 3]).pipe(map(item => ({ event: 'events', data: item })));
}
@SubscribeMessage('identity')
async identity(client: Client, data: number): Promise<number> {
return data;
}
}
event.module.ts
import { Module } from '@nestjs/common';
import { EventGateway } from './event.gateway';
@Module({
components: [EventGateway],
})
export class EventModule {}
有没有办法创建允许通过/api/events 进行服务器-客户端通信的控制器?
【问题讨论】:
标签: websocket controller nestjs