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

Posted

技术标签:

【中文标题】找不到Node.js /socket.io/socket.io.js express 4.0【英文标题】:Node.js /socket.io/socket.io.js not found express 4.0 【发布时间】:2014-06-04 11:32:06 【问题描述】:

所以我试图在我的网站上进行聊天,当我在本地进行测试时,它运行良好,因为我的本地主机上的端口 8080 可用并且所有这些好东西。但是现在我将我的代码推送到我的 Heroku 应用程序,当我尝试加载我的聊天页面时,我收到错误消息,指出它无法获取 localhost:8080/socket.io/socket.io.js。

我见过node.js /socket.io/socket.io.js not found 并尝试了这些建议,但没有一个奏效,即使将 socket.io.js 文件移动到资源文件中也不起作用。我猜这是因为我使用的是 express 4.0?

任何帮助将不胜感激 谢谢

编辑: 所以要添加更多细节,因为我的问题看起来有点模糊,这里是我的相关 app.js 代码:

 var client = require('socket.io').listen(8080).sockets;

在我的聊天页面的玉文件中,我有:

 script (src = `'http://localhost:8080/socket.io/socket.io.js`')

以后

 var socket = io.connect(`'http://localhost:8080`');

所有这些都在 localhost 上运行(我在端口 5000 上加载,socket.io 连接到端口 8080)。我使用带有 heroku 工具带的“工头开始”来执行此操作。

当我尝试更改这些以在 heroku 上工作时,它会中断,我不知道如何修复它。我希望这能稍微澄清一下这个问题。

编辑 2: 我在跑: 快递4.0.0

socket.io 0.9.16

节点 0.10.x

谢谢

【问题讨论】:

你能发布错误信息吗 【参考方案1】:

当您转到http://localhost:8080/socket.io/socket.io.js 时会发生什么?

它是 404 吗?如果确实如此,您需要确保将其放在 Express 设置为静态服务的目录中。

app.use(express.static(__dirname + '/public'));

然后将您的socket.io.js 文件放入public/socket.io/socket.io.js(相对于您的 app.js 文件)

重启你的服务器,看看能不能解决问题。

基本上,Express 不会从文件系统静态地提供文件,除非您明确告诉它从哪里映射。

【讨论】:

我尝试了这种方法,并将脚本行脚本 (src = 'http://localhost:8080/socket.io/socket.io.js') 更改为 (src = '/socket.io/socket.io.js'),现在我得到:未捕获的 ReferenceError: 未定义要求 谢谢!这很好用。如果您也在缩小/丑化您的客户端 JS 等,这提供了一种选择退出的方法。非常感谢。【参考方案2】:

express 中是否有一条明确的路线可以捕获所有其他路线?可能是这样的:

app.get("/", handlers.home);
app.get("/..." ...);
...
app.get("*", handlers.error);

这可能会使socket.io 无法为客户端托管它自己的js 文件。有一个简单的方法可以解决这个问题,因为您可能已经在 express 中设置了 publicstatic 文件夹。比如:

app.use(express.static("public"));

创建一个名为socket.io 的新文件夹并将相应的socket.io.js 文件复制到该文件夹​​中,一切都应该很好。 但请注意,有两个文件名为 socket.io.js!! 因此,如果您看到类似 "Uncaught ReferenceError: require is not defined" 的内容,则表示您复制了“node-ey”服务器端文件。这是要复制的正确 client 文件:

app_dir/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.min.js

注意@BHendricks:我会发布作为对您评论的回复,但我目前缺乏所需的声誉。

编辑: OPs 问题可能与“localhost”问题有关。从客户端连接时(比如您的家庭 IP),据您的浏览器所知 - localhost 意味着与本地托管内容的机器建立连接。由于您的家用机器(或手机)没有托管 socket.io,因此失败了。

您需要做的是让您的服务器嵌入套接字连接信息(完全限定的主机名、IP 等)。这可以在服务器使用客户端连接“呈现”页面时完成。

【讨论】:

我将 js 文件复制到公用文件夹中(在其中创建 socket.io 目录之后),然后在前端使用 let socket = io("localhost:5000"); 时出现以下错误. 有人可以帮忙 GET localhost:5000/socket.io/… 404 (Not Found)

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

node.js/typescript 找不到本地模块

node.js 要求找不到自定义模块

找不到模块“jsonwebtoken”Node.js

Rails / execjs 找不到 Node.js

找不到模块“mysql”node.js

Node.JS 找不到 json 文件,一切正常