【问题标题】:http://[app-name].herokuapp.com/socket.io/1/?t=1436904053183 404 Not Foundhttp://[app-name].herokuapp.com/socket.io/1/?t=1436904053183 404 未找到
【发布时间】:2015-10-03 15:57:03
【问题描述】:

我的网站出现以下错误。

http://[app-name].herokuapp.com/socket.io/1/?t=1436904053183 404 未找到

我的应用是一个使用 Socket.io 构建的聊天应用。我做了一项研究,发现它在 45361 中侦听的端口(此端口由 Heroku 设置)而我的 client.js 正在侦听不同的端口。如何告诉我的 client.js 从与 server.js 文件相同的端口进行侦听?

我的 server.js 文件如下所示:

app.configure(function() {
    app.set('port', process.env.PORT || 3000);
    app.set('ipaddr', process.env.IP || "127.0.0.1");
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.static(__dirname + '/public'));
    app.use('/js', express.static(__dirname + '/js'));
    app.use('/icons', express.static(__dirname + '/icons'));
    app.set('views', __dirname + '/views');
    app.engine('html', require('ejs').renderFile);

    /* Store process-id (as priviledged user) */
    try {
        npid.create('/var/run/advanced-chat.pid', true);
    } catch (err) {
        console.log(err);
        //process.exit(1);
    }

});

app.get('/', function(req, res) {
  res.render('index.html');
});

app.listen(app.get('port'), function() {
  console.log("Node app is running on port:" + app.get('port'))
})

在我的文件 client.js 中,我得到了这样的内容:

var socket = io.connect("//[app-name].herokuapp.com");

我也试过了:

var socket = io.connect("http://[app-name].herokuapp.com/");

珍惜你的时间!

【问题讨论】:

  • 您是否尝试过在不将 url 作为参数传递的情况下进行连接? var socket = io.connect(); 那是working for me
  • 是的,我做到了,但我在 Chrome 控制台中得到了相同的结果。 http://[app-name].herokuapp.com/socket.io/1/?t=1436905535251
  • 你的聊天是否部署在 Heroku 上?
  • 是的,它是here。很抱歉没能帮到您。

标签: node.js heroku websocket socket.io


【解决方案1】:

这是您可以尝试在客户端正确形成 url 的东西

    window.location.origin = window.location.origin || (window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);
    var socket = io.connect(window.location.origin);

【讨论】:

  • 我也试过这个选项,我得到了同样的错误。还有另一种方法来指定端口吗?我发现这篇文章显示的错误几乎和我一样。 jchansen.org/2014/03/28/… 在这篇文章中,作者在 Heroku 中设置的端口 80 每次我部署应用程序时都部署在不同的端口中。
  • 我读到有些人只使用 windows.location.hostname:var socket = io.connect(window.location.hostname);
  • 不确定这是否有所不同,但我在测试您的最后一个建议后收到的消息更改为:加载资源失败:服务器响应状态为 404(未找到)
猜你喜欢
  • 2015-10-10
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 2020-11-24
  • 1970-01-01
  • 2016-03-08
相关资源
最近更新 更多