BeagleBone Black编程控制LED时NodeJS出现socket.io报错如何解决?
问题原因
- 核心报错是
socket.io版本不兼容导致的API不匹配:你参考的旧教程使用的是socket.io 2.x版本,而当前npm默认安装的是3.x/4.x版本,该版本移除了.listen()的调用方式,因此会抛出require(...).listen is not a function错误。 - 代码中存在重复启动服务的逻辑:创建http服务时已经调用
.listen(8888)启动了8888端口的服务,代码最后一行再次调用server.listen()会导致端口占用、服务无响应。
修复方案
方式1:适配新版socket.io(推荐)
修改server.js代码如下:
- 替换socket.io初始化代码:
将原来的
var io = require('socket.io').listen(server);
替换为
var io = require('socket.io')(server);
- 删除最后一行重复启动服务的代码:
删掉server.listen(console.log("Server Running ..."));,直接保留console.log("Server Running ...");即可。 - 可选优化前端代码:如果修改后前端连接失败,可以将
index.html中的var socket = io.connect();改为var socket = io();,适配新版socket.io客户端语法。
方式2:降级到兼容版本的socket.io
如果不想修改原有代码,可以直接安装教程对应的2.x版本socket.io:
执行命令npm install socket.io@2.4.1即可直接兼容原有代码,注意同样需要删除重复的server.listen()调用。
内容的提问来源于stack exchange,提问作者Nicholai Mørch Rindarøy
相关产品推荐
相关产品推荐

