Ошибка приложения при попытке развертывания приложения Node.js/Express/Socket.io на Heroku

Я новичок во всех этих технологиях (включая несколько JavaScript), поэтому вам, возможно, придется нести со мной здесь.

Я внимательно следил за учебником ChatApp в документах Socket.IO и немного изменил приложение к моим предпочтениям; однако, я не думаю, что сильно изменил взаимодействие с сервером и прочее. Моя проблема неважно, что я делаю, я не могу заставить мое приложение успешно работать на Heroku. Я получаю это сообщение об ошибке при попытке загрузить приложение:

Ошибка приложения Произошла ошибка в приложении, и ваша страница не могла быть отправлена. Пожалуйста, попробуйте снова через пару минут. Если вы являетесь владельцем приложения, проверьте свои журналы для деталей.

Я не уверен, что мне не хватает чего-то очевидного или что.

Вот мой основной файл index.js:

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

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

app.use("/css", express.static(__dirname + '/css'));

//array of users currently in chat
var people = {};

io.on('connection', function(socket){
    console.log('user connected!');

    socket.on('join', function(name){
        people[socket.id] = name; //create entry in 'people' with new user
        socket.emit("update", "You have connected to the server.");
        io.sockets.emit("update", name + " has joined the server.");
        io.sockets.emit("update_people_list", people);
    });

    socket.on('disconnect', function(){
        console.log('user disconnected!');
        if(people[socket.id] != ""){
            io.sockets.emit("update", people[socket.id] + " has left the server.");
            delete people[socket.id];
            io.sockets.emit("update_people_list", people);
        }
    });

    socket.on('chat message', function(msg){
        console.log('message: ' + msg);
        io.sockets.emit('chat message', people[socket.id], msg);
    });
});


// http.listen(3000, function(){
//  console.log('listening on *:3000');
// });

index.html

<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery.js"></script>
<script>
  $(document).ready(function(){
    var ready = false;
    var socket = io.connect();

    $("#chat").hide();
    $(".canvasDiv").hide();
    $("#name").focus();
    //prevent form from being submitted without name
    $("form").submit(function(event){
      event.preventDefault();
    });

    //allows entering by hitting 'Enter' for name
    $("#name").keypress(function(e){
      if(e.which == 13) { //if ENTER key
        var name = $("#name").val();
        if(name != ""){
          socket.emit("join", name);
          $("#login").detach();
          $("#chat").show();
          $("#msg").focus();
          ready = true;
        }
      }
    });

    $('#chatform').submit(function(){  //when submit chat message
      socket.emit('chat message', $('#msg').val()); //emit message + value of input
      $('#msg').val('');  //empty field?
      return false; //so that the page doesn't refresh
    });

    //SOCKET LISTENING
    socket.on('chat message', function(user, msg){
      if(ready){
        $('#messages').append("<p><strong><span class='chat-user'>" + htmlEntities(user) + " </span></strong>:  " + htmlEntities(msg) + "</p>");
        //adjust height and scroll as need be:
        var $container = $('#messages');
        var height = $container.get(0).scrollHeight;
        $container.scrollTop(height);
      }
    });

    socket.on("update", function(io_message){
      if(ready){
        $('#messages').append("<p class='notification'>" + htmlEntities(io_message) + "</p>")
      }
    });

    socket.on("update_people_list", function(people){
      if(ready){
        $("#people").empty(); //clear to refresh it
        $.each(people, function(client_id, name){
          $('#people').append("<p class='notification'>" + htmlEntities(name) + "</p>");
        });
        var $container = $("#messages");
        var height = $container.get(0).scrollHeight;
        $container.scrollTop(height);
      }
    });

  });
</script>

Кроме того, файл package.json

 {
  "name": "socket-chat-example",
  "version": "0.0.1",
  "description": "my first socket.io app",
  "dependencies": {
    "express": "^4.6.1",
    "socket.io": "^1.0.6"
  }
}

PROCFILE:

web: node index.js

.gitignore:

node_modules/

Ответ 1

Раскрытие информации: я являюсь владельцем платформы Node в Heroku

Сначала вы должны запустить heroku logs, чтобы получить вывод журнала.

Во-вторых, вы хотите прокомментировать listen на своем сервере? Без этого ваш сервер не сможет принимать входящие соединения:

// http.listen(3000, function(){ // console.log('listening on *:3000'); // });

Наконец, вместо привязки к жесткокодированному порту (3000) вы должны привязать к переменной среды по умолчанию:

http.listen(process.env.PORT || 3000, function(){ console.log('listening on', http.address().port); });

Ответ 2

После проверки heroku logs мне удалось выяснить, что моя зависимость bcrypt правильно определена в package.json. Я бы порекомендовал вам:

  • Убедитесь, что ваши зависимости имеют правильные версии, прикрепленные к ним.
  • Удалить node_modules файл
  • Выполнить npm install
  • Проверьте правильность установки всех зависимостей
  • Если они установлены правильно, то git push heroku

Ответ 3

Я столкнулся с той же ошибкой, но в том числе "start":"node app.js" в файле package.json имеет смысл исправить проблему. Надеюсь, это поможет любому, кто встречает ту же ошибку.

Примечание. app.js должен быть вашим собственным файлом главного сервера.

Ответ 4

Я также столкнулся с этой ошибкой после того, как не использовал мое приложение Node в течение нескольких недель. Причина в том, что приложение не только спало, но и база данных и его соединение тоже. Я использую бесплатный экземпляр MongoDB, размещенный MongoLab.

Я исправил это, запустив мою локальную копию приложения, заставив MongoLab пробудиться. Затем через несколько минут мое приложение, размещенное в Heroku, снова заработало.