无法使用node.js加载socket.io:未定义io

时间:2016-05-21 00:29:45

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

我使用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>

1 个答案:

答案 0 :(得分:0)

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

解决方案是在任何其他标记之前移动<script src="/socket.io/socket.io.js"></script>(有16个脚本声明:angular,bootstrap,jquery,moment等)。

因此,如果您在浏览器中收到“未捕获的ReferenceError:io未定义”消息,请先在标记内的页面开头移动“。它将为您节省大量努力以使其发挥作用。