【发布时间】:2011-08-03 22:25:59
【问题描述】:
我刚开始使用 socket.io,它在客户端页面上给出 JS 错误
io 未定义
如何解决这个问题?
【问题讨论】:
我刚开始使用 socket.io,它在客户端页面上给出 JS 错误
io 未定义
如何解决这个问题?
【问题讨论】:
您也可以使用Socket.io CDN:
<script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
【讨论】:
将<script src="http://yournodeserver/socket.io/socket.io.js"></script> 放入您的代码中
【讨论】:
我在使用 express 时遇到了同样的问题。即使将服务器:端口放在脚本中也行不通。服务器启动后,我会让套接字监听该端口,我猜这是错误的。将其更改为以下工作正常
var app = express();
app.set('port', process.env.PORT || 3000);
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(app.get('port'));
在客户端我只包含脚本
<script src="/socket.io/socket.io.js"></script>
【讨论】:
我有一个套接字应用程序,我的服务器(不是 CDN)在其中提供 socket.io.js 脚本。因此,虽然 Emmerman 说您需要在客户端 HTML 代码中包含脚本标记是正确的,但如果您的后端关闭,则不会加载资产。一种选择是编写一个客户端 JS 脚本,在尝试使用 socket.io 之前检查 io。如果它不存在(未定义/空),那么您可以有条件地显示其他内容,例如“服务器关闭”,或者在我的情况下,我将设置一个计时器,它会定期检查,直到服务器恢复。
[更新 2] 最终不得不包含脚本标签,检查 io 对象的存在并在 10 秒后执行 window.location.reload()(使用 setTimeout)(最终希望能找到脚本已加载,io 存在,之后我可以连接到套接字服务器。)
[更新] 我正在使用 ajax 调用加载脚本,而不是使用 html 脚本标记。然后使用计时器定期检查脚本是否会加载——最终它会在服务器恢复/重新启动时加载。 jQuery ref 动态加载 JS 脚本:http://api.jquery.com/jQuery.getScript/
【讨论】:
<script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
这是要包含的最新版本的 socket.io。
【讨论】:
您确保使用“服务器”而不是“应用程序”。
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const {
Server
} = require('socket.io');
const io = new Server(server);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html')
});
io.on('connection', (socket) => {
console.log('a user connected');
});
app.listen(3000, () => {
console.log('Listining on 3000');
}); // wrong
server.listen(3000, () => {
console.log('Listining on 3000');
}); // correct
【讨论】:
将您的客户端代码包装在 '$(document).ready()' 上,用于 jQuery 或其他类似库的函数。这样你就可以确保你的代码在加载库之后运行。
【讨论】:
我必须这样做。 (对于客户。)
function setup() {
var socket;
socket = io.connect('http://localhost:3000');
}
/*
This solved my error.
*/
【讨论】:
例如,如果您的服务器在端口 3000 上侦听并且您的 index.html 在 localhost:3000 上连接,那么它将无法在该端口上包含本地库。 要解决这个问题,您应该已经安装了一个普通的服务器,例如 xampp,并在您的页面中包含要从 xampp 提供的库的完整 url 例如://localhost/my-project/node_modules/socket.... 或者只是从cdn包含它 或使用 socket = io.connect('http://localhost:3000');并从普通服务器加载您的页面,例如 xampp
【讨论】:
更改脚本文件的顺序,首先是库 socket.io,然后是你的脚本文件
<script src="/socket.io/socket.io.js"></script>
<script src="./js/your-script.js"></script>
【讨论】:
http://socket.io/download/ - 最新cdn官方页面。
【讨论】: