I am using socket.io and getting this error:
throw new ERR_INVALID_ARG_TYPE(name, 'Function', value);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "listener" argument must be of type function. Received undefined
I am making a controller for the callbacks on the socket, this is how it looks:
const { onDisconnect } = require('./app/controllers/socket');
/*
...
*/
io.on('connection', (socket) => {
socket.on('disconnect', onDisconnect(socket));
});
I get the error right on the "onDisconect" function. However if I declare the function like this, it works:
io.on('connection', (socket) => {
socket.on('disconnect', () => {
console.log(`${socket.id} disconnected`);
});
});
I have the "onDisconect" function on another script, which contains this:
const onDisconnect = (socket) => {
console.log(`${socket.id} disconnected`);
}
module.exports = { onDisconnect };
CodePudding user response:
That's because you're calling onDisconnect()
, which returns undefined
, which is not a function. You have two options:
- Simply change
socket.on("disconnect", onDisconnect(socket))
tosocket.on("disconnect", onDisconnect)
- Return a function in
onDisconnect
:
function onDisconnect(socket) {
return () => {
console.log(`${socket.id} disconnected`);
};
}