Parsa Shariat
Parsa Shariat

Reputation: 25

Problems with socket.io and Nodejs controller

Hello guys i have a strange problem

in chatController.js

var io = socketIO(server)

and server exported from index.js

const server = http.createServer(app);
server.listen(config.port,()=> console.log(`Listening on port ${ config.port }`))
module.exports = server

and in my routes

router.get('/' , chatController.index)

my controller class

class chatController extends controller {
index(req,res){
    console.log('Request')
    res.render('/')   
    io.on('connection' , (socket)=>{
        console.log(socket.id)
    })}

when i request to / for first time everythings ok but when i request for second time io.on function make 2 same socket for request


my Terminal log

terminal picture

i have three socket.id in third request can u help me ? thanks

Upvotes: 0

Views: 86

Answers (1)

Sandeep Patel
Sandeep Patel

Reputation: 5148

Don't put io.on('connection',(socket)=>{}) inside any request handler(controller); You can use it in index.js.

 const server = http.createServer(app);
    var io = socketIO(server)
    server.listen(config.port,()=> console.log(`Listening on port ${ config.port }`))
    io.on('connection' , (socket)=>{
            console.log(socket.id)
    module.exports = server;

Or write module which is independent of any controller logic something like this:

 // IOConnection.js
    module.exports =   function(io) {
     io.on('connection' , (socket)=>{
         console.log(socket.id)
     })
    }



 var IOConnection = require('./IOConnection.js')
    const server = http.createServer(app);
    var io = socketIO(server);
    IOConnection(io);
    server.listen(config.port,()=> console.log(`Listening on port ${ config.port }`))

module.exports = server;

Upvotes: 1

Related Questions