web-dev-qa-db-fra.com

Erreur d'application lors de la tentative de déploiement de l'application Node.js/Express/Socket.io sur Heroku

Je suis assez nouveau pour toutes ces technologies (y compris un peu de JavaScript), vous devrez donc peut-être supporter avec moi ici.

J'ai suivi le didacticiel de ChatApp sur Socket.IO docs assez étroitement et modifié l'application à mon goût quelque peu; Cependant, je ne pense pas avoir beaucoup changé du côté de l'interaction serveur, etc. Mon problème est que peu importe ce que je fais, je n'arrive pas à faire en sorte que mon application s'exécute avec succès sur Heroku. Je reçois ce message d'erreur en essayant de charger l'application:

Erreur d'application Une erreur s'est produite dans l'application et votre page n'a pas pu être servie. Merci de réessayer dans quelques instants. Si vous êtes le propriétaire de l'application, consultez vos journaux pour plus de détails.

Je ne sais pas s'il me manque quelque chose d'évident ou quoi.

Voici mon fichier principal 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>

De plus, mon fichier 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/
11
keb

Divulgation: je suis le propriétaire de la plate-forme nodale chez Heroku

Tout d'abord, vous devez exécuter heroku logs pour obtenir la sortie de journalisation.

Deuxièmement, voulez-vous dire commenter listen sur votre serveur? Sans cela, votre serveur n'autorisera aucune connexion entrante:

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

Enfin, au lieu de vous lier à un port codé en dur (3000), vous devez lier une variable d’environnement avec une valeur par défaut:

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

31
hunterloftis

J'ai rencontré la même erreur, mais l'inclusion de "start":"node app.js" dans le fichier package.json tend à résoudre le problème. J'espère que cela aide tous ceux qui rencontrent la même erreur. 

Remarque: app.js doit être votre propre fichier de serveur principal.

2
Nhiyhe

Après avoir vérifié heroku logs, j'ai pu découvrir que ma dépendance à bcrypt était définie correctement dans package.json. Je vous recommanderais: 

  1. Vérifiez que les versions correctes sont attachées à vos dépendances.
  2. Supprimer le fichier node_modules
  3. Exécuter npm install
  4. Vérifier si toutes les dépendances sont installées correctement
  5. S'ils ont correctement installé, alors git Push heroku
2
Clement

J'ai également rencontré cette erreur après ne pas utiliser l'application Node pendant plusieurs semaines. La raison semblait en être que non seulement l'application s'était endormie, mais également la base de données et sa connexion. J'utilise une instance MongoDB gratuite hébergée par MongoLab.

J'ai résolu ce problème en exécutant ma copie locale de l'application, ce qui a réveillé MongoLab. Puis, après quelques minutes, mon application hébergée sur Heroku a recommencé à fonctionner.

0
Grid Trekkor

Vérifiez toutes vos dépendances. Vous pouvez le confirmer en recoupant votre package.json ou plutôt actualiser l'installation de toutes les dépendances de votre package.json

0
Fakuade Segun