Node.js /socket.io/socket.io.js not found express 4.0

Node.js /socket.io/socket.io.js not found express 4.0

本文关键字:socket io js express found Node not      更新时间:2023-09-26

所以我正在努力让聊天在我的网站上运行,当我在本地测试时,它运行得很好,因为我的本地主机上的8080端口是可用的,所有这些都很好。但现在我把我的代码推到了我的Heroku应用程序中,当我尝试加载聊天页面时,我收到了一个错误,说它无法获得localhost:8080/socket.io.js.

我看到node.js/socket.io/socket.io.js未找到并尝试了这些建议,但都不起作用,甚至将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:我正在跑步:express 4.0.0

插座.io 0.9.16

节点0.10.x

感谢

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"服务器端文件。以下是要复制的正确客户端文件:

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

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

编辑:OP问题可能更多地与"localhost"问题有关。当从客户端(比如你的家庭IP)连接时,据你的浏览器所知,localhost意味着与本地托管东西的机器的连接。由于您的家用机器(或手机)不支持socket.io,因此这是失败的。

您需要做的是让服务器嵌入套接字连接信息(完全限定的主机名、ip等)。当服务器使用客户端连接"呈现"页面时,可以执行此操作。

转到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不会从文件系统静态地提供文件,除非您明确告诉它从哪里映射。