获取 throw new ERR_INVALID_ARG_TYPE(name, 'Function', value);

Getting throw new ERR_INVALID_ARG_TYPE(name, 'Function', value);

我正在使用 socket.io 并收到此错误:

throw new ERR_INVALID_ARG_TYPE(name, 'Function', value);
^

TypeError [ERR_INVALID_ARG_TYPE]: The "listener" argument must be of type function. Received undefined

我正在为套接字上的回调制作一个控制器,它是这样的:

const { onDisconnect } = require('./app/controllers/socket');

/*
...
*/

io.on('connection', (socket) => {
    socket.on('disconnect', onDisconnect(socket));
});

我在“onDisconect”函数上得到了正确的错误。但是,如果我这样声明函数,它会起作用:

io.on('connection', (socket) => {
    socket.on('disconnect', () => {
        console.log(`${socket.id} disconnected`);
    });
});

我在另一个脚本上有“onDisconect”函数,其中包含:

const onDisconnect = (socket) => {
    console.log(`${socket.id} disconnected`);
}

module.exports = { onDisconnect };

那是因为您正在调用 onDisconnect(),而 returns undefined 不是函数。您有两个选择:

  1. 只需将socket.on("disconnect", onDisconnect(socket))更改为socket.on("disconnect", onDisconnect)
  2. Return onDisconnect 中的函数:
function onDisconnect(socket) {
  return () => {
    console.log(`${socket.id} disconnected`);
  };
}