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

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

io 未定义

如何解决这个问题?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    您也可以使用Socket.io CDN:

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

    【讨论】:

    【解决方案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官方页面。

                【讨论】:

                  猜你喜欢
                  • 2022-12-11
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-03-23
                  • 2020-04-14
                  • 2014-09-14
                  • 2014-08-06
                  • 2011-11-28
                  • 2019-10-21
                  相关资源
                  最近更新 更多