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】:将<script src="http://yournodeserver/socket.io/socket.io.js"></script>
放入您的代码中
【讨论】:
@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.js时Node.js“未捕获的语法错误:意外的令牌<”
尝试发出时,带有 Node.js 的 Socket.io 在路由文件中返回未定义