我已经按照以前一直为我工作的完全相同的步骤,通过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)
答案 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)