找不到Node.js /socket.io/socket.io.js快递4.0

时间:2014-04-20 08:01:14

标签: javascript node.js heroku express socket.io

所以我正在尝试在我的网站上进行聊天工作,当我在本地进行测试时,它工作得很好,因为我的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

由于

2 个答案:

答案 0 :(得分:8)

你在express中有一条明确的路线可以捕获所有其他路线吗?也许是这样的事情:

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

这可能使socket.io无法为客户端托管自己的js文件。有一种简单的方法可以解决这个问题,因为您可能已经在快递中设置了publicstatic文件夹。类似的东西:

  

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