【发布时间】: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