I am getting this issue in my code.
Can anybody help me?
Server has started on port 5001
{ id: 'Qg9lzlaYKvZL8It5AAAB', name: 'Jatan', room: 'Test' }
C:\Users\Jatan\chat-app\server\index.js:46
io.to(user.room).emit('message', {user:user.name, text: message})
^
TypeError: Cannot read properties of undefined (reading 'room')
at Socket.<anonymous> (C:\Users\Jatan\chat-app\server\index.js:46:20)
at Socket.emit (node:events:520:28)
at Socket.emitUntyped (C:\Users\Jatan\chat-app\server\node_modules\socket.io\dist\typed-events.js:69:22)
at C:\Users\Jatan\chat-app\server\node_modules\socket.io\dist\socket.js:465:39
at processTicksAndRejections (node:internal/process/task_queues:78:11)
[nodemon] app crashed - waiting for file changes before starting...
const express = require('express')
//const socketio = require('socket.io')
//const http = require('http')
const {createServer} = require('http')
const {Server} = require('socket.io')
const { addUser, removeUser, getUser, getUsersInRoom} = require('./users')
const PORT = process.env.PORT || 5001
const router = require('./router')
// Basic code to start socket.io server
const app = express()
//const server = http.createServer(app)
const httpServer = createServer()
const io = new Server(httpServer, {
cors: {
origin: "http://localhost:3005"
}
})
io.on('connection', (socket) => {
socket.on('join', ( {name, room}, callback ) => {
const {error, user} = addUser({ id: socket.id, name, room})
console.log(user)
if(error) return callback(error);
socket.emit('message', {user: 'admin', text: `${user.name}, welcome to the room ${user.room}`})
socket.broadcast.to(user.room).emit('message', {user: 'admin', text:`${user.name}, has joined!`})
socket.join(user.room)
io.to(user.room).emit('roomData', {room: user.room, users: getUsersInRoom(user.room)})
callback();
})
socket.on('sendMessage', (message , callback) => {
const user = getUser(socket.id)
io.to(user.room).emit('message', {user:user.name, text: message})
callback();
})
socket.on('disconnect', () =>{
const user = removeUser(socket.id)
if(user) {
io.to(user.room).emit('message', { user: 'Admin', text: `${user.name} has left.` });
io.to(user.room).emit('roomData', { room: user.room, users: getUsersInRoom(user.room)});
}
})
});
app.use(router)
httpServer.listen(PORT, () => console.log(`Server has started on port ${PORT}`))
const users = [];
const addUser = ({id,name,room}) => {
//name = name.trim().toLowerCase();
//room = room.trim().toLowerCase();
const existingUser = users.find((user)=> user.name === name && user.room === room)
if (existingUser) {
return {error: 'Username is taken'}
}
const user = {id,name,room};
users.push(user);
return {user}
}
const removeUser = (id) => {
const index = users.findIndex((user) => user.id === id)
if (index !== -1){
return users.splice(index, 1)[0]
}
}
const getUser = (id) => {users.find((user) => user.id === id)}
const getUsersInRoom = (room) => {users.filter((user) => user.room === room)}
module.exports = { addUser, removeUser, getUser, getUsersInRoom}