Tengo una aplicación que se conecta a un servidor Nestjs para establecer una conexión WS (el servidor está en una URL diferente, por lo que es una solicitud CORS).
El WebsocketGateway se define como tal.
@WebSocketGateway(port, { handlePreflightRequest: (req, res) => { const headers = { 'Access-Control-Allow-Headers': 'Authorization', 'Access-Control-Allow-Origin': 'the page origin', 'Access-Control-Allow-Credentials': true, }; res.writeHead(200, headers); res.end(); } })Funciona de maravilla en Chrome v87 y hacia abajo y en Firefox. Desde que actualicé mi navegador a Chrome 88, la conexión front-end socket-io entra en un ciclo de conexión y reconexión, como:
CORS error como el único mensaje en la consola del navegadorAsí lo arreglé
import { IoAdapter } from '@nestjs/platform-socket.io'; import { ServerOptions } from 'socket.io'; export class SocketAdapter extends IoAdapter { createIOServer( port: number, options?: ServerOptions & { namespace?: string; server?: any; }, ) { const server = super.createIOServer(port, { ...options, cors: true }); return server; } }principal.ts
const app = await NestFactory.create(AppModule, { cors: true }); app.useWebSocketAdapter(new SocketAdapter(app));En caso de que alguien más necesite esto, en su decorador hay una propiedad cors
@WebSocketGateway({ cors: true })