Socket connection from NextJS to a node backend

Viewed 1270

I am trying to implement a basic socket connection from my NextJS client side (running on localhost:3000) to my NestJs server (running on localhost:3003).

The server code looks like this

ChatGateway.ts

import {
  SubscribeMessage,
  WebSocketGateway,
  OnGatewayInit,
  WebSocketServer,
  OnGatewayConnection,
  OnGatewayDisconnect,
} from '@nestjs/websockets';
import {
  Logger
} from '@nestjs/common';
import {
  Socket,
  Server
} from 'socket.io';

@WebSocketGateway()
export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {

  @WebSocketServer() server: Server;
  private logger: Logger = new Logger('ChatGateway');

  @SubscribeMessage('msgToServer')
  handleMessage(client: Socket, payload: string): void {
    console.log(payload);
    this.server.emit('msgToClient', payload);
  }


  afterInit(server: Server) {
    this.logger.log('Init');
  }

  handleDisconnect(client: Socket) {
    this.logger.log(`Client disconnected: ${client.id}`);
  }

  handleConnection(client: Socket, ...args: any[]) {
    this.logger.log(`Client connected: ${client.id}`);
    this.server.emit('msgToClient', "payload");
  }
}

ChatModule.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ChatGateway } from "./chat.gateway";


@Module({
  imports: [],
  controllers: [],
  providers: [ChatGateway],
})
export class ChatModule {}

AppModule.ts

@Module({
  imports: [TypeOrmModule.forRoot(), NewsletterModule, AuthModule, UsersModule, ListingsModule, ChatModule]
})
export class AppModule {
  constructor(private connection: Connection) {}

But when I try to connect to the socket from my client side

import {
  io
} from "socket.io-client";



function Chat() {
  const socket = io("http://127.0.0.1:3003");

  useEffect(() => {
    console.log("chat useEffect")
    socket.emit('msgToServer', "message")
  }, [])
  socket.on('msgToClient', (message) => {
    console.log(message)
  })

I am not getting any errors, but also there is nothing happening when I emit or try to receive events from the server.

Even the server console doesnt log the emit events. The only thing that happens on the server is that the client gets connected and disconnected all the time without even me doing anything

enter image description here

Any idea why cant I connect to the sockets and why is the server constantly connecting and disconnecting even if I disable the socket connection form the client side.

Thanks!

1 Answers

Socket.io client needs to be version 2. Version 3 and 4 are breaking changes and don't communicate with a v2 server. Once Nest v8 hits, socket.io v4 will be used by default.

Related