运行socket.io代码报TypeError: socket.listen is not a function错误咨询
错误原因
- 你使用的是
socket.io@3.0.0及以上的新版本,该版本早已废弃了旧版本中的listen()静态方法,调用socketio.listen()自然会抛出方法不存在的类型错误。 - 代码还存在一处逻辑错误:
socket.on('disconnect')的监听代码写在了connection事件回调的外部,全局作用域下不存在socket实例,即使修复了listen方法的问题,运行后也会抛出新的报错。
修复方案
推荐直接适配新版本的语法规范,修改两处代码即可:
- 将socket.io的初始化逻辑改为
const io = socketio(server) - 将disconnect事件的监听逻辑移到
connection事件的回调函数内部,绑定到连接成功生成的socket实例上。
修正后的完整代码如下:
const http = require('http'); const socketio = require('socket.io'); const server = http.createServer((req, res) => { res.end('hey!'); }); server.listen(3000); // 替换原listen写法,使用新版本初始化语法 const io = socketio(server); io.sockets.on('connection', (socket) => { console.log('Kullanıcı bağlandı.'); // 将disconnect监听移到回调内部,绑定当前连接的socket实例 socket.on('disconnect', () => { console.log('Kullanıcı ayrıldı.'); }); });
如果你需要保留原listen()写法,也可以降级socket.io到2.x版本,执行命令npm install socket.io@2即可。
内容的提问来源于stack exchange,提问作者Enes Kutulman
相关产品推荐
相关产品推荐

