所以我正在尝试在我的网站上进行聊天工作,当我在本地进行测试时,它工作得很好,因为我的localhost上的端口8080可用并且所有这些都很好。但现在我将我的代码推送到我的Heroku应用程序,当我尝试加载我的聊天页面时,我收到错误声明它无法获取localhost:8080 / socket.io / socket.io.js。
我见过node.js /socket.io/socket.io.js not found 并尝试了这些建议,但没有一个工作,甚至将socket.io.js文件移动到资源文件中都不起作用。我猜这是因为我使用快递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 toolbelt使用'foreman start'来做到这一点。
当我尝试将这些更改为在heroku上工作时,它会中断并且我不确定如何修复它。我希望这有点澄清这个问题。
编辑2: 我在跑: 表达4.0.0
socket.io 0.9.16
节点0.10.x
由于
答案 0 :(得分:8)
你在express
中有一条明确的路线可以捕获所有其他路线吗?也许是这样的事情:
app.get("/", handlers.home);
app.get("/..." ...);
...
app.get("*", handlers.error);
这可能使socket.io
无法为客户端托管自己的js文件。有一种简单的方法可以解决这个问题,因为您可能已经在快递中设置了public
或static
文件夹。类似的东西:
app.use(express.static( “公共”));
创建一个名为socket.io
的新文件夹,并将相应的socket.io.js
文件复制到所述文件夹中,一切都应该正常。 但请注意,有两个名为socket.io.js
的文件!! 因此,如果您看到类似"Uncaught ReferenceError: require is not defined"
的内容,则表示您复制了“node-ey”服务器端文件。以下是要复制的正确客户端文件:
APP_DIR / node_modules / socket.io / node_modules / socket.io的客户端/ DIST / socket.io.min.js
注意@BHendricks:我刚刚发布了对您评论的回复,但我目前缺乏必要的声誉。
修改强>: OPs问题可能与“localhost”问题有关。当从客户端(比如你的家庭IP)连接时,就你的浏览器所知 - localhost意味着与本地托管东西的机器连接。由于您的家用机器(或电话)没有托管socket.io,因此失败了。
您需要做的是让您的服务器嵌入套接字连接信息(完全限定的主机名,IP等)。当服务器使用客户端连接“呈现”页面时,可以执行此操作。
答案 1 :(得分:3)
当你去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不会从文件系统静态提供文件,除非您明确告诉它从哪里映射。