无法使用node.js加载socket.io:io未定义
我使用express生成器生成了一个快速应用程序,并且在包含socket.io时我注意到,socket.io客户端没有被浏览器加载。 我在互联网上搜索了两天,找不到解决方案。
我遵循socket.io指令进行express 3/4,实际上服务器公开的socket.io客户端正在被服务(没有404错误)。 问题是,当试图使用socket io客户端的javascript代码因为“io未定义”而失败时
尽管HTTP GET to 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服务器调试消息说“socket.io:server服务客户端源+ 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>
我正在回答我自己的问题。 我终于找到了解决这个问题的办法,但我仍然不知道原因是什么。
解决方案是在任何其他标签(有16个脚本声明:angular,bootstrap,jquery,moment等)之前移动<script src="/socket.io/socket.io.js"></script>
。
因此,如果您在浏览器中首先将“未捕获的ReferenceError:io未定义”消息先移动到页面开始处的标记内 。 它会为您节省很多努力,使其工作。
链接地址: http://www.djcxy.com/p/63187.html