31

我刚刚开始使用 socket.io,它在客户端页面上给出了 JS 错误

io 未定义

如何解决这个问题?

4

11 回答 11

40

或者,您可以使用Socket.io CDN

<script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
于 2011-04-12T16:22:43.787 回答
26

放入<script src="http://yournodeserver/socket.io/socket.io.js"></script>您的代码中

于 2011-04-12T14:03:20.703 回答
10

我在使用 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>
于 2012-11-14T03:42:26.187 回答
2

我有一个套接字应用程序,我的服务器(不是 CDN)正在提供 socket.io.js 脚本。因此,虽然 Emmerman 说您需要在客户端 HTML 代码中包含脚本标记是正确的,但如果您的后端关闭,则不会加载资产。一种选择是让您在尝试使用 socket.io 之前编写一个检查 io 的客户端 JS 脚本。如果它不存在(未定义/空),那么您可以有条件地显示其他内容,例如“服务器关闭”,或者在我的情况下,我将设置一个计时器,它会定期检查,直到服务器恢复。

[更新 2] 最终不得不包含脚本标签,检查io对象的存在并在 10 秒后执行 window.location.reload() (使用setTimeout)(最终希望找到脚本已加载并io存在,之后我可以连接到套接字服务器。)

[更新] 我正在使用 ajax 调用加载脚本,而不是使用 html 脚本标签。然后使用计时器定期检查脚本是否会加载——最终它会在服务器恢复/重新启动时加载。jQuery ref 动态加载 JS 脚本:http: //api.jquery.com/jQuery.getScript/

于 2012-07-03T18:35:46.077 回答
1
<script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>

这是要包含的最新版本的 socket.io。

于 2013-11-21T09:13:57.023 回答
1

你确保你使用“服务器”而不是“应用程序”。

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
于 2021-05-08T15:48:00.120 回答
0

将您的客户端代码包装在 '$(document).ready()' 上,用于 jQuery 或其他类似的库函数。这样你就可以确保你的代码在加载库之后运行。

于 2014-05-23T09:55:28.427 回答
0

我不得不这样做。(对于客户。)

function setup() {
  var socket;
  socket = io.connect('http://localhost:3000');
}
/*
This solved my error.
*/

于 2020-01-03T07:39:20.630 回答
0

更改脚本文件的顺序,首先是库 socket.io,然后是你的脚本文件

<script src="/socket.io/socket.io.js"></script>
<script src="./js/your-script.js"></script>
于 2021-08-05T16:48:17.473 回答
0

例如,如果您的服务器在端口 3000 上侦听并且您的 index.html 在 localhost:3000 上连接,那么它将无法在该端口上包含本地库。为了解决这个问题,你应该已经安装了一个普通的服务器,例如 xampp,并将你的库的完整 URL 包含在你的页面中,例如://localhost/my-project/node_modules/socket....或者只是从 cdn 包含它或使用 socket = io.connect('http://localhost:3000'); 并从普通服务器加载您的页面,例如 xampp

于 2020-09-05T11:40:17.773 回答
-1

http://socket.io/download/ - 最新cdn的官方页面。

于 2015-05-09T10:58:25.613 回答