节点服务器,Socket.io 'io未定义'?

13

我按照以前一直有效的步骤进行操作,通过express创建应用程序,并将模块依赖项放置在node_modules文件夹中。看起来socket.io客户端javascript文件找不到了。

(我查看了其他人的解决方案,是在脚本标签中包含JavaScript文件。但我的先前的node + socket.io项目没有这样做过)。

客户端上的JavaScript:

var socket = io.connect('http://localhost');

JavaScript 在服务器端:

var io = require('socket.io').listen(app);

node_modules文件夹:

socket.io, which has an internal node_modules folder containing socket.io-client

错误信息:

Uncaught ReferenceError: io is not defined
(anonymous function)
当我手动包含socket.io客户端时: http://cdn.socket.io/stable/socket.io.js

我遇到了一个不同的错误,即:

Uncaught TypeError: Object #<Object> has no method 'connect'
(anonymous function)

客户端是否已经加载了Socket.io脚本? - Jordan Running
@Jordan 这就是问题所在,脚本没有在客户端加载。不过我正在努力找出它为什么不能加载。 - Jack
请看这里:https://dev59.com/UVnUa4cB1Zd3GeqPa35l - Marshall
7个回答

14

在客户端,您是否执行了以下操作:

<script src="/socket.io/socket.io.js"></script>

在设置socket变量之前需要注意什么?


谢谢,那已经解决了。我本来以为 http://cdn.socket.io/stable/socket.io.js 会管用的... - Jack
1
@Jack:不需要,据我所知,socket.io.js是由您的服务器动态提供的,并带有所有必要的信息,这就是为什么您不必自己在客户端进行任何websocket配置(端口等)的原因。很高兴能帮到您。 - Jorge Israel Peña
那么,如果CDN必须从您打算连接的服务器加载,使用CDN有什么意义呢? - Phil

5

我是一名Node.js新手! 我非常确定这个问题已经有了答案。但是我在socket的src方面一直遇到问题。显然,对于客户端而言,这段代码:<script src="/socket.io/socket.io.js">无法工作。

我用下面这行代码替换了上面的代码,并且看起来运行得很好。

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

(Edit: 尽管这是显而易见的,但根据您阅读此答案的时间,此链接可能无法使用。请从以下链接中选择最新的链接:https://cdnjs.com/libraries/socket.io)

这是一个可行的客户端代码:

<body>

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>

<script>
    $(function(){
        var socket = io('http://localhost:8080');
        console.log("Socket connected"+socket.connected);

        socket.on('notification', function(value){
            //insert your code here
        });
    });

</script>

在服务器端(仅处理一个套接字)

var app  = require('express')();
var http = require('http').Server(app);
var io   = require('socket.io')(http);
var port = process.env.PORT || 8080;


app.get('/', function(req, res){
    console.log("app works");
});

io.on('connection', function(socket){
    socket.emit('notification', {message:"hi"});
});

http.listen(port, function(){
    console.log('listening on :' + port);
});

1
那个脚本现在也有些过时了,许多工作实际上不适用于我,用户应该从这里选择最新的 .js:https://cdnjs.com/libraries/socket.io - Marek Bernád
好的,这将方便其他人搜索 ;) - Marek Bernád

4

在客户端:

<head>
<script src="http://localhost/socket.io/socket.io.js"></script>
</head>

4

我设法应付了这个问题,浪费了大约一个小时的时间,结果发现这是一个非常基本的错误。

当一个函数没有被定义时会出现什么情况?例如 " Uncaught ReferenceError: io is not defined "。 这难道不意味着在"创建"它之前就已经在"使用"它吗?

在我的 HTML 文件中,“调用” JavaScript 文件的部分如下:

<script src='./js/playerChatter.js'></script> <!-- this one calls io -->
<script src="http://localhost:2019/socket.io/socket.io.js"></script><!--ThisCreatesio-->

我将其更改为以下内容

<script src="http://localhost:2019/socket.io/socket.io.js"></script> <!--ThisCreates io-->
<script src='./js/playerChatter.js'></script> <!-- this on calls io -->

所以现在项目“io”,无论它是对象还是函数...实际上都是在使用之前创建的:D
玩得开心!

如果我访问URL http://localhost:4000/socket.io/socket.io.js,里面什么也没有。 - prayagupa

0

我通过在Node.js服务器上运行索引页面来解决了这个问题。

很可能 "index.html" 和 "/socket.io/socket.io.js" 文件应该由你的 Node.js 服务器提供。

如链接中所述 Uncaught ReferenceError: io is not defined

因此,当我执行 https://localhost:3000(3000是启动nodejs的端口)时,错误得到了解决。


-1

enter image description here

enter image description here

使用 server.listen() 可以解决这个问题;

9
如果您想回答问题,请将代码作为文本传递,而不是屏幕截图。 - Petter Friberg

-1
确保使用最新的CDN版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接