当前位置: 首页 > 知识库问答 >
问题:

Heroku上的NodeJS+ExpressJS+SocketIO给出了GET/socket...404

山翼
2023-03-14

我在设置socketIO 1.1以在Heroku上工作时遇到了问题。我在运行Express V4.2。socketio在localhost上运行得很好。然而,在Heroku上,它给出了这个错误:

来自Heroku日志:

2014-09-15T09:40:14.578660+00:00 app[web.1]: GET /socket.io/?EIO=3&transport=polling&t=1410774014583-86 404 6ms - 744b

从浏览器:

GET http://[mydomainname]/socket.io/?EIO=3&transport=polling&t=1410774080589-97 404 (Not Found) socket.io.js:2680Request.create socket.io.js:2680Request socket.io.js:2614XHR.request socket.io.js:2555XHR.doPoll socket.io.js:2585Polling.poll socket.io.js:2951Polling.doOpen socket.io.js:2895Transport.open socket.io.js:2106Socket.open socket.io.js:1580Socket socket.io.js:1467Socket socket.io.js:1419Manager.open.Manager.connect socket.io.js:272(anonymous function)

我遵循了套接字IO文档中推荐的配置。相关代码如下:

var express = require('express');
/* routes */
var routes = require('./routes/index');
var users = require('./routes/users');

var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var cons = require('consolidate');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('dust', cons.dust);
app.set('view engine', 'dust');

app.use(favicon());
app.use(logger('dev'));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser('hashionhashion'));
app.use(require('less-middleware')(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

//routing
app.use('/', routes);
app.use('/users', users);


/// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

/// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});



//start the server
var server = require('http').Server(app);

var io = require('socket.io').listen(server);
var ioSockets = {};

io.on('connection', function(socket) {

    ioSockets[socket.id] = socket;

    socket.emit('welcome', {message: socket.id});

    socket.on('disconnect', function(socket) {
        delete ioSockets[socket.id];
    });
});

exports.ioSockets = ioSockets;
module.exports = app;

server.listen(3000, function() {
    console.log('Congrats, nothing broke!! Listening on port %d', server.address().port);
});

在我的客户端文件中,脚本如下:

<script src="my_path_to/socket.io.js"></script>
<script>
var socket = io.connect();

var socketId = '';

socket.on('welcome', function (data) {
    socketId = data.message;
});
</script>

我还尝试了io.connect到“http://localhost”“http://localhost:3000”和我的Heroku应用程序域。它们都会产生相同的错误。

任何帮助都将不胜感激!

共有1个答案

澹台星剑
2023-03-14

这个问题最终是一个明确的问题,在4.10.0之后的版本中已经纠正了这个问题。

供您自己阅读:https://github.com/strongloop/express/issues/2406 https://github.com/jshttp/on-finished/issues/10

 类似资料:
  • 试图调试这个简单的NodeJS socketIO服务器。 我在启动时不断收到以下错误消息。我看不出代码有什么问题。 TypeError:侦听器必须是服务器上Namespace.EventEmitter.AddListener(Events.js:130:11)处的TypeError()处的函数。(匿名函数)[如上](/users/foo/bin/node_modules/socket.io/lib

  • 问题内容: 我正在尝试在我的Node.js服务器(Expressjs框架)上实现HTTPS。我有自己的签名证书和密钥,以及用于测试/开发的自签名证书/密钥: 我还在Heroku上设置了SSL端点。一切正常,并且Endpoint似乎正常运行,但是当我在生产环境中(在Heroku上)运行应用程序时,出现了H13应用程序错误。有趣的是(或者不是),如果我告诉express创建一个HTTP服务器:它可以工

  • 我有一个这样的静态ExpressJS服务器: 当我启动服务器时,它使用20MB的v8堆。如果我每秒重新加载一个页面,则使用的堆会不断增长。4小时后,使用的v8堆将达到40MB。v8堆的总容量达到80MB,RSS(进程使用的总内存)达到130MB。 为什么这个简单而静态的服务器使用这么多内存?这似乎是内存泄漏。如果我不停止页面重新加载,使用的内存会继续增长。 如果像这样一个简单的静态服务器使用了太多

  • 在Fedora21上执行ffmpeg命令时,我面临“请求的输出格式'rtp_mpegts'不是合适的输出格式”;而同样的工作在Ubuntu任何想法请。 ffmpeg版本2.4.11版权所有(c)2000-2015 ffmpeg开发人员 于2015年8月26日19:46:08构建,使用gcc 4.9.2(gcc)20150212(Red Hat 4.9.2-6)配置:--prefix=/usr--b

  • 问题内容: 我正在做一个API,它在Heroku上。但是我只在heroku方面遇到了socket.io的一些问题,当我在本地对其进行测试时一切正常。该API完全独立于前端,因此它们位于不同的域(和不同的主机)中。问题是在生产中,我无法成功连接插座… 我有一些问题,所有这些都是关于heroku上的socket.io配置的。我知道有些帖子包含有关此信息的信息,但是我发现这些帖子使用的是旧版本的sock

  • 我刚开始使用AWS-Lambda、AWS-API Gateway和ExpressJs。我在查找AWS-Lambda“上下文”如何在我的“ExpressJs”应用程序中可用时遇到了麻烦。 我正在使用: AWS-Lambda AWS-API网关 NodeJs v4.3.2 ExpressJs 4.14.1 ClaudiaJs 2.7.0 在Aws Lambda中,我使用aws-serverless-e