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

时间:2011-09-29 20:47:12

标签: node.js socket.io

我已经按照以前一直为我工作的完全相同的步骤,通过express创建应用程序,将模块依赖项放在node_modules文件夹中。似乎找不到socket.io客户端javascript文件。

(我已经查看了其他人的修复,包括将JavaScript文件包含在脚本选项卡中。我没有必要为我之前的节点+ 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)

6 个答案:

答案 0 :(得分:13)

在客户端,你做了:

<script src="/socket.io/socket.io.js"></script>
在设置socket变量之前

答案 1 :(得分:3)

我设法犯了这个错误,浪费了大约一个小时,发现这是一个非常基本的错误。

何时未定义功能?例如“Uncaught ReferenceError:io未定义”。 这是否意味着该函数在“创建”之前被“使用”了?

在我的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

有乐趣!

答案 2 :(得分:3)

Node.js新手在这里! 我很确定已经回答了这个问题。然而,我一直在寻找socket的src问题。显然这个:<script src="/socket.io/socket.io.js">在客户端不适合我。

我用这个替换了上面这一行,似乎工作正常。

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

(编辑:虽然这很明显,但根据您何时阅读此答案,此链接可能无效。请从以下位置选择最新链接: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>

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

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);
});

答案 3 :(得分:2)

在客户端:

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

答案 4 :(得分:0)

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

最可能的“ index.html”和“ /socket.io/socket.io.js”文件应为 由您的Node.js服务器提供服务。

如网址中所述

Uncaught ReferenceError: io is not defined

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

答案 5 :(得分:-2)

enter image description here

enter image description here

  1. 使用server.listen()可以修复它;