Node.js /socket.io/socket.io.js not found express 4.0
Node.js /socket.io/socket.io.js not found express 4.0
所以我正在努力让聊天在我的网站上运行,当我在本地测试时,它运行得很好,因为我的本地主机上的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中设置了public
或static
文件夹。类似于:
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不会从文件系统静态地提供文件,除非您明确告诉它从哪里映射。
- 如何使用Socket.io将命令从客户端发送到服务器
- Socket.IO未定义变量
- Socket.io on Mozilla Rhino
- socket.io发射三次
- AngularJS$q承诺使用socket.io
- 如何知道使用socket.io订阅/取消订阅频道
- 通过socket.io发射给特定的人
- 通过socket.io从浏览器流式传输视频
- 通过node.js和socket.io向特定用户发送数据
- 如何使用socket.io在meanjs项目中配置jshint
- 如何使用Socket.io和Node.js开发大型聊天应用程序
- RangeError nodejs socket.io
- 通过node.js和socket.io在两个用户之间发送消息
- 使用socket.io更新express实时视图
- socket.io cookie解析握手错误
- 如何在同一端口上使用ExpressJS和Socket.io
- 使用cordova快速nodejs socket.io
- 通过socket.io与heroku应用程序进行通信
- Socket.io客户端在使用名称空间时忽略端口[Bug?]
- Node.js-socket.io-对io.sockets的引用突然未定义