socket.io,io 未定义(JS 错误)

Posted

技术标签:

【中文标题】socket.io,io 未定义(JS 错误)【英文标题】:socket.io, io is not defined (JS Error) 【发布时间】:2011-08-03 22:25:59 【问题描述】:

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

io 未定义

如何解决这个问题?

【问题讨论】:

【参考方案1】:

您也可以使用Socket.io CDN:

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

【讨论】:

哇,我需要这样的东西。谢谢! 下来,发生了什么? 网址好像变了socket.io/blog/introducing-socket-io-1-0/#cdn-delivery【参考方案2】:

&lt;script src="http://yournodeserver/socket.io/socket.io.js"&gt;&lt;/script&gt; 放入您的代码中

【讨论】:

@Shawn 文件的顺序可能是问题所在。你的外部 js 文件应该在 socket.io.js 之后导入。 路径 /socket.io/ 到底在哪里?我在 socket.io 示例中随处可见,但在我的系统上找不到它...请帮助某人【参考方案3】:

我在使用 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>

【讨论】:

我会使用它而不是接受的答案,以便它在 localhost 和您拥有它的域上保持不变。另一个可以工作,但必须更改。 哈哈,这行得通。正如文档中所说的那样socket.io/get-started/chat【参考方案4】:

我有一个套接字应用程序,我的服务器(不是 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/

【讨论】:

如果您不想从第三方域加载库,这是非常酷的解决方案。谢谢你分享这个。拯救了我的一天:)【参考方案5】:
<script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

我必须这样做。 (对于客户。)

function setup() 
  var socket;
  socket = io.connect('http://localhost:3000');

/*
This solved my error.
*/

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

<script src="/socket.io/socket.io.js"></script>
<script src="./js/your-script.js"></script>

【讨论】:

【参考方案11】:

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

【讨论】:

以上是关于socket.io,io 未定义(JS 错误)的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - Socket.io:socket.request 未定义

socket.io 未定义并拒绝连接

加载socket.io.js时Node.js“未捕获的语法错误:意外的令牌<”

尝试发出时,带有 Node.js 的 Socket.io 在路由文件中返回未定义

未捕获的类型错误:无法读取未定义 socket.io.client 的属性“sid”

express js 中的 Socket.io:Router.use 需要中间件功能但未定义