找不到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 中设置了 public
或 static
文件夹。比如:
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的主要内容,如果未能解决你的问题,请参考以下文章