我使用express-generator生成了一个快速应用程序,当包含socket.io时,我注意到socket.io客户端没有被浏览器加载。我已经在互联网上搜索了2天没有成功的解决方案。
我遵循了express 3/4的socket.io指令,实际上正在服务于/socket.io/socket.io.js上的服务器公开的socket.io客户端(没有404错误)。 问题是,当尝试使用套接字io客户端的javascript代码失败时,因为" io未定义"
关于为什么浏览器没有加载客户端的任何想法虽然它说明HTTP GET到http://localhost:8080/socket.io/socket.io.js会返回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服务器调试消息说&#34; socket.io:server服务客户端源+ 3s&#34;)
// 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>
答案 0 :(得分:0)
我正在回答我自己的问题。 我终于找到了解决这个问题的方法,但我仍然不知道原因是什么。
解决方案是在任何其他标记之前移动<script src="/socket.io/socket.io.js"></script>
(有16个脚本声明:angular,bootstrap,jquery,moment等)。
因此,如果您在浏览器中收到“未捕获的ReferenceError:io未定义”消息,请先在标记内的页面开头移动“。它将为您节省大量努力以使其发挥作用。