我刚开始使用socket.io,它在客户端页面上给出了JS错误
io未定义
如何解决这个问题?
答案 0 :(得分:33)
或者,您可以使用Socket.io CDN:
<script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
答案 1 :(得分:21)
将<script src="http://yournodeserver/socket.io/socket.io.js"></script>
放入您的代码
答案 2 :(得分:5)
使用快递时我遇到了同样的问题。即使把服务器:端口放在脚本里面也行不通。服务器启动后我会让socket监听那个端口,这是我猜错了。把它改成下面工作正常
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>
答案 3 :(得分:2)
我有一个套接字应用程序,我的服务器(不是CDN)正在为socket.io.js脚本提供服务。因此,虽然Emmerman说您需要在客户端HTML代码中包含脚本标记,但如果您的后端已关闭,则不会加载该资产。一个选项是您编写一个客户端JS脚本,在您尝试使用socket.io之前检查io。如果它不存在(undefined / null),那么你可以有条件地显示其他东西,比如“服务器关闭”或者在我的情况下,我将设置一个定期检查的定时器,直到服务器恢复。
[更新2]结束必须包含脚本标记,检查是否存在io
对象并在10秒后执行window.location.reload()(使用setTimeout
)(最终希望能够找到加载的脚本并且io
存在,之后我可以连接到套接字服务器。)
[更新]我正在使用ajax调用加载脚本,而不是使用html脚本标记。然后使用计时器我会定期检查脚本是否会加载 - 最终它将在服务器恢复/重新启动时进行。 jQuery引用动态加载JS脚本:http://api.jquery.com/jQuery.getScript/
答案 4 :(得分:1)
<script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
这是要包含的socket.io的最新版本。
答案 5 :(得分:1)
将客户端代码包装在'$(document).ready()'上,用于jQuery或其他类似库的函数。通过这种方式,您可以确保在加载库之后运行代码。
答案 6 :(得分:0)
http://socket.io/download/ - 最新cdn的官方页面。
答案 7 :(得分:0)
我必须这样做。 (对于客户。)
function setup() {
var socket;
socket = io.connect('http://localhost:3000');
}
/*
This solved my error.
*/
答案 8 :(得分:0)
例如,如果您的服务器在端口3000上侦听,而index.html在localhost:3000上连接,则它将无法在该端口上包含本地库。 要解决此问题,您应该已经安装了普通服务器(例如xampp),并将要从xampp提供的库的完整URL包括在页面中 例如:// localhost / my-project / node_modules / socket...。 或只是从CDN包含它 或使用socket = io.connect('http:// localhost:3000');并从普通服务器(例如xampp)中加载页面
答案 9 :(得分:0)
请确保使用“服务器”而不是“应用程序”。
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
答案 10 :(得分:0)
更改脚本文件的顺序,首先是库socket.io,然后是你的脚本文件
<script src="/socket.io/socket.io.js"></script>
<script src="./js/your-script.js"></script>