2014-07-25 18 views
10

zu implementieren Ich bin ziemlich neu in all diesen Technologien (einschließlich etwas JavaScript), so dass Sie hier mit mir ertragen müssen.Anwendung Fehler beim Versuch, Node.js/Express/Socket.io-Anwendung auf Heroku

Ich folgte dem ChatApp Tutorial über Socket.IO Docs ziemlich genau und änderte die Anwendung nach meinen Vorstellungen etwas; Ich glaube jedoch nicht, dass ich mich auf Seiten der Serverinteraktion und anderer Dinge sehr verändert habe. Mein Problem ist, egal was ich tue, ich kann meine Bewerbung nicht erfolgreich auf Heroku laufen lassen. Ich erhalte diese Fehlermeldung beim Versuch, die App zu laden:

Anwendungsfehler Ein Fehler in der Anwendung aufgetreten und Ihre Seite nicht bedient werden kann. Bitte versuchen Sie es in einigen Augenblicken erneut. Wenn Sie der Besitzer der Anwendung sind, überprüfen Sie Ihre Protokolle für Details.

Ich bin mir nicht sicher, ob mir etwas offensichtlich fehlt oder was.

Hier ist meine Haupt index.js Datei:

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> 

Zusätzlich meine package.json Datei

{ 
    "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/ 

Antwort

29

Disclosure: Ich bin der Knoten Plattform Owner von Heroku

Zuerst Sie heroku logs laufen soll Protokollierung Ausgabe zu erhalten.

Zweitens, meinst du, listen auf Ihrem Server auskommentiert haben? Ohne dies wird Ihr Server erlauben keine eingehenden Verbindungen:

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

Schließlich stattdessen zu einem fest codierten Port binden (3000), die Sie eine Umgebungsvariable mit einem Standard binden sollte:

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

+0

Das ist mein Problem gelöst. Vielen Dank. –

+1

'Heroku Logs' haben mir geholfen, herauszufinden, dass Express in devDependencies und nicht in Abhängigkeiten installiert wurde. Ich habe es in Abhängigkeiten installiert und es hat funktioniert! Vielen Dank! – Siddharth

1

Ich habe den gleichen Fehler gefunden, aber einschließlich "start":"node app.js" in Paket.json Datei neigt dazu, das Problem zu beheben. Hoffe, das hilft jedem, der den gleichen Fehler findet.

Hinweis: app.js sollte Ihre eigene Hauptserverdatei sein.

0

Dieser Fehler trat auch auf, nachdem ich meine Node App mehrere Wochen lang nicht verwendet hatte. Der Grund dafür war, dass die App nicht nur eingeschlafen war, sondern auch die Datenbank und ihre Verbindung. Ich verwende eine kostenlose MongoDB-Instanz, die von MongoLab gehostet wird.

Ich habe dies behoben, indem ich meine lokale Kopie der App ausgeführt habe, wodurch MongoLab aufwachte. Dann, nach ein paar Minuten, begann meine von Heroku gehostete App wieder zu arbeiten.

2

Nach der Überprüfung heroku logs konnte ich herausfinden, dass meine BCrypt-Abhängigkeit in package.json ordnungsgemäß definiert wurde. Ich würde Sie weiterempfehlen:

  1. Überprüfen Sie, ob Ihre Abhängigkeiten die richtigen Versionen haben.
  2. löschen node_modules Datei
  3. Run npm install
  4. Überprüfen Sie, ob alle Abhängigkeiten ordnungsgemäß
  5. installiert Wenn sie richtig installiert haben, dann git push heroku
Verwandte Themen