【问题标题】:Can't load socket.io using node.js: io is not defined无法使用 node.js 加载 socket.io:io 未定义
【发布时间】:2021-04-10 18:19:31
【问题描述】:

我使用 express-generator 生成了一个快速应用程序,当包含 socket.io 时,我注意到浏览器没有加载 socket.io 客户端。我在互联网上搜索了 2 天没有成功的解决方案。

我遵循了关于 express 3/4 的 socket.io 说明,实际上正在为 /socket.io/socket.io.js 上的服务器公开的 socket.io 客户端提供服务(没有 404 错误)。 问题是当尝试使用socket io客户端的javascript代码因为“io is not defined”而失败时

关于为什么浏览器没有加载客户端的任何想法,尽管它声明到http://localhost:8080/socket.io/socket.io.js 的 HTTP GET 返回 HTTP 200?

顺便说一句,该应用程序也在使用 Angular.js。

index.html

<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script type="text/javascript">
 // Uncaught ReferenceError: io is not defined
 var socket = io.connect('http://localhost:8080');
</script>

app.js(没有错误日志和 socket.io 服务器调试消息显示“socket.io:server serve client source +3s”)

// setup server
app.set('port', process.env.PORT || 8080);

var server = require('http').Server(app);
var io = require('socket.io')(server);

console.log(app.get('port'));

server.listen(app.get('port'),  function() {
  console.log('Express server listening on port ' + server.address().port);

});


io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

更新:

使用 socket.io CDN 的结果是一样的。它不起作用

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>

【问题讨论】:

  • 您是否在服务器端安装了正确的服务器端版本的 socket.io?你看过http://localhost:8080/socket.io/socket.io.js从客户那里给你什么了吗?该文件是您所期望的吗? io 在里面定义了吗?客户端是否还有其他错误?您需要清除浏览器缓存吗?
  • @jfriend00 socket.io 版本为 1.4.6。关于我从客户那里得到的文件是这样的:gist.github.com/endymion00/a69c9f187c1dc9c3e8f05443f5cd0c57。正如我所说,客户端中唯一的错误是“未捕获的 ReferenceError:io 未定义”,我还尝试多次清除浏览器缓存并尝试使用匿名浏览。
  • 我可以确认该文件不包含io 的定义,因此它显然不是正确的文件或不是完整的文件。您的 socket.io 的服务器端安装一定有问题。在服务器上安装socket.io时你做了什么?安装后您是否手动复制了任何文件?
  • @jfriend00 很奇怪,实际上我在安装时唯一做的就是所需的“npm install socket.io --save”。我还测试了 socket.io 示例聊天应用程序,它可以工作。我的应用程序和聊天示例之间的唯一区别是我的应用程序有更多的 app.set/app.use 调用,并且是使用 express-generator 生成的。我试图改变 app."x" 调用的顺序,但还没有成功(显然我检查了 socket.io "get started")。

标签: javascript angularjs node.js sockets socket.io


【解决方案1】:

我正在回答我自己的问题。 我终于找到了解决这个问题的方法,但我仍然不知道是什么原因。

解决方案是将&lt;script src="/socket.io/socket.io.js"&gt;&lt;/script&gt; 移动到任何其他标签之前(有 16 个脚本声明:angular、bootstrap、jquery、moment 等)。

因此,如果您在浏览器上收到“Uncaught ReferenceError: io is not defined”消息,请在标签内的页面开头移动第一个“”。它将为您节省很多努力使其工作。

【讨论】:

  • 我不明白..解决方案到底是什么???
  • @dll_onFire 解决方案是您的 html 文件上的 socket.io 引用必须放在其他库之前。
  • @testing_22 太好了,我很高兴这在 5 年多后帮助了某人! :)
猜你喜欢
  • 2018-09-11
  • 2019-11-13
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多