Node.js socket.io.js 未找到或 io 未定义

Posted

技术标签:

【中文标题】Node.js socket.io.js 未找到或 io 未定义【英文标题】:Node.js socket.io.js not found or io not defined 【发布时间】:2012-05-20 17:48:36 【问题描述】:

我正在尝试在我的 freebsd 服务器上运行 node.js 应用程序,但我无法让 socket.io 库使用它。我试过包括:

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

这会产生 404 错误,如果我直接链接到该文件(即它在我的 public_html 文件夹中的位置),我会收到 io not defined 错误。

提前致谢

【问题讨论】:

【参考方案1】:

尝试创建另一个包含这一行的 node.js 应用程序,然后使用 node.js 运行它

var io = require('socket.io').listen(8000);

然后在您的浏览器中访问http://127.0.0.1:8000,您应该会看到友好的“欢迎来到socket.io”。问候。如果你得到这个,那么 socket.io 正在运行并将提供 socket.io.js 文件。

我能想到的唯一可能发生的事情是您可能没有链接到客户端文件中的备用端口。除非你在 express 上运行 socket.io 服务器,它在端口 80 上运行。现在创建一个客户端文件,将 socket.io 的脚本源设置为

<script src="http://127.0.0.1:8000/socket.io/socket.io.js"> </script>

这应该连接到在端口 8000 上运行的 socket.io 服务器并获取 socket.io.js 文件。

【讨论】:

谢谢,这没有发生,我会看看修复它。 我很困惑。我遇到了同样的问题,这确实有效,但我绝对想在不运行单独服务器的情况下修复它。 “我能想到的唯一可能发生的另一件事是您可能没有链接到客户端文件中的备用端口”您的意思是什么,我在端口 3200 上使用 express,有什么特别的吗我必须使用 socket.io 才能在端口 3200 上为客户端 js 文件提供服务?【参考方案2】:

您的 node.js 应用程序仍然必须为其提供服务 - 它不会自动提供服务。你的服务器里有什么?应该是这样的

var app = require('express').createServer();                                    
var io = require('socket.io').listen(app);

或类似的(listen 很重要)。该位置不是磁盘上的真实位置 - 据我了解,socket.io 库应该拦截 URL 并为其客户端库提供服务。

【讨论】:

【参考方案3】:

在正文解析器之后添加以下内容:

, express.static(__dirname + "/public")

比如:

var app = module.exports = express.createServer(
  express.bodyParser()
  , express.static(__dirname + "/public")
);

【讨论】:

【参考方案4】:

如果他们直接从您的local file directory(ex: file:///C:/Users/index.html) 运行(打开)您的 html 文件,则会遇到同样的问题。

解决方案:您必须通过服务器正在侦听的localhost (ex: http://localhost:3000/index.html) 运行(打开)文件。

下面的代码 sn-p 显示了如何创建服务器以及如何与 expresssocket.io 连接在一起

const express = require("express");
const app = express();
const httpServer = require("http").createServer(app); 
const io = require("socket.io")(httpServer);

///////////////////////////////////////////////////////////////
// Any other server-side code goes here                     //
//////////////////////////////////////////////////////////////

httpServer.listen(3000, () => 
    console.log(`Server listening to port 3000`);
);

【讨论】:

以上是关于Node.js socket.io.js 未找到或 io 未定义的主要内容,如果未能解决你的问题,请参考以下文章

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

/socket.io/socket.io.js 中不提供 Socket.io

找不到Node.js /socket.io/socket.io.js express 4.0

Node.js Websockets Socket.IO

获取 http://localhost:3000/socket.io/socket.io.js 404(未找到)

os x 上的 node.js socket.io 服务器无法连接超过 120 个客户端