title: Application Error when attempting to deploy Node.js/Express/Socket.io application on Heroku
body: <p>I am fairly new to all of these technologies (including somewhat JavaScript) so you might have to bear with me here.</p>
  
  <p>I followed the ChatApp tutorial over at Socket.IO docs fairly closely and modified the application to my likings somewhat;  however, I don't think  I changed much on the side of server interaction and stuff. My problem is no matter what I do, I can't seem to be able to get my application to successfully run on Heroku. I get this error message when trying to load the app:</p>
  
  <blockquote>
    <p>Application Error
    An error occurred in the application and your page could not be served. Please try again in a few moments. If you are the application owner, check your logs for details.</p>
  </blockquote>
  
  <p>I am not sure if I am missing something obvious or what.</p>
  
  <p>Here is my main index.js file:</p>
  
  <pre><code>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');
  // });
  </code></pre>
  
  <p>index.html</p>
  
  <pre><code>&lt;script src="/socket.io/socket.io.js"&gt;&lt;/script&gt;
  &lt;script src="http://code.jquery.com/jquery.js"&gt;&lt;/script&gt;
  &lt;script&gt;
    $(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("&lt;p&gt;&lt;strong&gt;&lt;span class='chat-user'&gt;" + htmlEntities(user) + " &lt;/span&gt;&lt;/strong&gt;:  " + htmlEntities(msg) + "&lt;/p&gt;");
          //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("&lt;p class='notification'&gt;" + htmlEntities(io_message) + "&lt;/p&gt;")
        }
      });
  
      socket.on("update_people_list", function(people){
        if(ready){
          $("#people").empty(); //clear to refresh it
          $.each(people, function(client_id, name){
            $('#people').append("&lt;p class='notification'&gt;" + htmlEntities(name) + "&lt;/p&gt;");
          });
          var $container = $("#messages");
          var height = $container.get(0).scrollHeight;
          $container.scrollTop(height);
        }
      });
  
    });
  &lt;/script&gt;
  </code></pre>
  
  <p>Additionally, my package.json file</p>
  
  <pre><code> {
    "name": "socket-chat-example",
    "version": "0.0.1",
    "description": "my first socket.io app",
    "dependencies": {
      "express": "^4.6.1",
      "socket.io": "^1.0.6"
    }
  }
  </code></pre>
  
  <p>Procfile:</p>
  
  <pre><code>web: node index.js
  </code></pre>
  
  <p>.gitignore:</p>
  
  <pre><code>node_modules/
  </code></pre>