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

所以我试图让聊天工作在我的网站上,当我在本地testing时,它工作得很好,因为我的本地主机上的端口8080是可用的,所有的好东西。 但现在我把我的代码推送到我的Heroku应用程序,当我尝试加载我的聊天页面时,出现错误,指出无法获取localhost:8080 / socket.io / socket.io.js。

我看到node.js /socket.io/socket.io.js没有find,并试图build议,但没有工作,即使将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`'); 

所有这一切工作本地主机(我加载在端口5000,socket.io连接到端口8080)。 我使用heroku toolbelt使用“工头”开始工作。

当我尝试改变这些工作在heroku,它打破了,我不知道如何解决它。 我希望这个问题稍微澄清一点。

编辑2:我正在运行:express 4.0.0

socket.io 0.9.16

节点0.10.x

谢谢

你有express明确的路线,捕捉所有其他路线? 也许这样的东西:

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

这可能会让socket.io无法为客户端托pipe它自己的js文件。 有一个简单的方法来解决这个问题,因为你可能已经有一个publicstatic文件夹设置快速。 就像是:

app.use(express.static( “公共”));

创build一个名为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客户端/距离/ socket.io.min.js

请注意@BHendricks:我会刚刚发表回复您的评论,但我目前缺乏所需的声誉。

编辑 :OP的问题可能有更多的与“本地”问题。 当从客户端连接(比如说你的家庭IP)时,就你的浏览器所知 – localhost意味着与本地托pipe的机器连接。 由于您的家庭计算机(或电话)不承载socket.io,这是失败的。

你需要做的是你的服务器embedded套接字连接信息(一个完全合格的主机名,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不会从文件系统静态提供文件,除非您明确告诉它从哪个映射。