BHe*_*cks 6 javascript heroku node.js express socket.io
所以我正在尝试在我的网站上进行聊天工作,当我在本地进行测试时,它工作得很好,因为我的本地主机上的端口8080可用并且所有这些都很好.但现在我将我的代码推送到我的Heroku应用程序,当我尝试加载我的聊天页面时,我收到错误声明它无法获取localhost:8080/socket.io/socket.io.js.
我已经看到找不到node.js /socket.io/socket.io.js 并尝试了这些建议,但没有一个工作,即使将socket.io.js文件移动到资源文件也无效.我猜这是因为我使用快递4.0?
任何帮助将不胜感激谢谢
编辑:所以要添加更多细节,因为我的问题看起来有点模糊,这是我的相关app.js代码:
var client = require('socket.io').listen(8080).sockets;
Run Code Online (Sandbox Code Playgroud)
在我的聊天页面的玉文件中,我有:
script (src = `'http://localhost:8080/socket.io/socket.io.js`')
Run Code Online (Sandbox Code Playgroud)
后来
var socket = io.connect(`'http://localhost:8080`');
Run Code Online (Sandbox Code Playgroud)
这一切都在localhost上工作(我在端口5000上加载,socket.io连接到端口8080).我使用heroku toolbelt使用'foreman start'来做到这一点.
当我尝试将这些更改为在heroku上工作时,它会中断并且我不确定如何修复它.我希望这有点澄清这个问题.
编辑2:我正在运行:快速4.0.0
socket.io 0.9.16
节点0.10.x
谢谢
您是否有明确的路线express捕获所有其他路线?也许这样的东西:
app.get("/", handlers.home);
app.get("/..." ...);
...
app.get("*", handlers.error);
Run Code Online (Sandbox Code Playgroud)
这可能使我们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客户端/距离/ socket.io.min.js
注意@BHendricks:我刚刚发布了对您评论的回复,但我目前缺乏必要的声誉.
编辑:OP问题可能与"localhost"问题有关.当从客户端(比如你的家庭IP)连接时,就你的浏览器所知 - localhost意味着与本地托管东西的机器连接.由于您的家用机器(或电话)没有主机socket.io,这是失败的.
您需要做的是让您的服务器嵌入套接字连接信息(完全限定的主机名,IP等).当服务器使用客户端连接"呈现"页面时,可以执行此操作.
| 归档时间: |
|
| 查看次数: |
6772 次 |
| 最近记录: |