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

32

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

io未定义

如何解决这个问题?

12个回答

42

或者你可以使用Socket.io CDN

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

哇,我需要这样的东西。谢谢! - Ionică Bizău
下来,发生了什么事? - Hotgeart
似乎URL已更改http://socket.io/blog/introducing-socket-io-1-0/#cdn-delivery - Nev Stokes

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

3
文件的顺序可能是问题所在。您应该在导入 socket.io.js 之后再导入外部的 js 文件。 - Nevin Madhukar K
2
地球上哪里可以找到路径/socket.io/?我在socket.io的示例中到处都看到它,但我在我的系统中找不到它...请有人帮忙。 - EdNdee

10

在使用Express时,我遇到了同样的问题。即使将server:port放置在script中也不能生效。在服务器启动后,我会让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>

我会使用这个替代被接受的答案,这样它在本地主机和您所在的域上保持一致。另一个方法也可以工作,但必须进行更改。 - WallMobile
这个可行。正如文档中所述 https://socket.io/get-started/chat - Derk Jan Speelman

2
我有一个套接字应用程序,我的服务器(不是CDN)正在提供socket.io.js脚本。因此,虽然Emmerman正确地说您需要在客户端HTML代码中包含脚本标记,但如果您的后端关闭,资产将无法加载。一种选择是编写客户端JS脚本,在尝试使用socket.io之前检查io是否存在。如果不存在(未定义/空),则可以有条件地显示其他内容,例如“服务器已关闭”,或者在我的情况下,我将设置一个定时器,定期检查直到服务器恢复为止。
[更新2] 最终不得不包含脚本标记,检查io对象的存在,并在10秒钟后执行window.location.reload()(使用setTimeout)(希望最终能够找到已加载的脚本并且io存在,之后我可以连接到套接字服务器)。
[更新] 我使用 ajax 调用来加载脚本,而不是使用 html 的 script 标签。然后,通过计时器定期检查脚本是否加载 - 当服务器恢复/重新启动时,它最终会加载。使用 jQuery 引用动态加载 JS 脚本:http://api.jquery.com/jQuery.getScript/

如果你不想从第三方域加载库,这是一个相当不错的解决方案。感谢分享。救了我的一天 :) - Cha0s

1
请确保你使用的是 "server" 而不是 "app"。
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

1
<script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>

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

0

无需编辑任何内容,只需转到您的index.js并确保您放置了:

server.listen(PORT,()=>{
/**Code**/
})

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

0

更改脚本文件的顺序,先是库socket.io,然后是您自己的脚本文件

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

0

我必须这样做。(为了客户。)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接