I'm trying to create chat with nestjs, and it is problem with its @SubscribeMessage()
,
implementation with connection is working, but when I try to listen the emits from frontend and console
the data in nestjs, it not works
import { Server, Socket } from 'socket.io';
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from '../entities/user.entity';
import { Repository } from 'typeorm';
import { Messenger } from './entities/messenger.entity';
@Injectable()
@WebSocketGateway(5000)
export class MessengerGateway implements OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit {
constructor(
@InjectRepository(User)
private userRepository: Repository<User>,
@InjectRepository(Messenger)
private messageRepository: Repository<Messenger>,
) {}
@SubscribeMessage('loadPeople')
handleEvent(client: Socket, data){
console.log(data);
// this is not working
}
async afterInit(server: Server) {
console.log('Init');
}
@SubscribeMessage('is-online')
async handleConnection(client: Socket) {
console.log('connected');
// I can see this message in console
}
@SubscribeMessage('is-offline')
async handleDisconnect(client: Socket) {
console.log('disconnected');
// I can see this message in console
}
}
from front end I'm sending this requests
import { io } from "socket.io-client";
const ENDPOINT = "localhost:5000";
let socket
function App(){
useEffect(()=>{
socket = io(ENDPOINT)
socket.emit('loadPeople', {token: localStorage.token})
},[])
return (
//...
)
}
It works when I'm using the nodejs(expressjs) with socket.io, But when I try to do this with nestjs, it's not working
Based on NestJS Websocket documentation, the NestJS socketIO server is still in v2.
If you check the version compatibility, you will see that socketIO server v2 is not compatible with socketIO client v4.
The easiest solution would be to use
socket.io-client
v2.3.0
in yourpackage.json
of frontend.Or, if you like to explore: socketIO server v3 is compatible with socketIO client v4. So I believe you can take a look into this issue (as mentioned in NestJS docs) and try to convert your NestJS socketIO server to support socketIO client v3. Hopefully, that would also support socketIO client v4 as well. (I didn't test this though!)
Hope this helps you. Cheers !!!