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

时间:2011-04-12 14:01:32

标签: node.js socket.io

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

  

io未定义

如何解决这个问题?

11 个答案:

答案 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>