title: Node.js server.listen callback?
body: <p>I have a node.js application and I need to run a command once the server starts listening. The docs on <code>server.listen</code> say: <br /><code>server.listen(port, [hostname], [backlog], [callback])</code><br /> but when I try to use this format, the code is not run, but no error messages are appearing. 
  Here is the listening part of my application: </p>
  
  <pre><code>var spawn = require('child_process').spawn
  function listen(port) {
      try {
          server.listen(port, "localhost",511, function() {
            spawn("open",["http://localhost:"+port+"/"])
          })
      } catch (e) {
          listen(port+1)
      }
  }
  </code></pre>
  
  <p><hr />
  <br />
  Some of you requested to see the entirety of my code, so here it is:<br /></p>
  
  <pre><code>var http = require("http"),
      path = require("path"),
      fs = require("fs"),
      mime = require("mime"),
      port = 1
  var server = http.createServer(function(req, resp) {
      if (req.url == "/action" &amp;&amp; req.headers["command"]) {
          resp.writeHead(200, {
              "Content-Type": "text/plain"
          });
          console.log("Command sent: " + req.headers["command"])
          try {
              var out = eval(req.headers["command"])
              if (typeof out == "object") {
                  var cache = [];
                  out = JSON.stringify(out, function(key, value) {
                      if (typeof value === 'object' &amp;&amp; value !== null) {
                          if (cache.indexOf(value) !== -1) {
                              return "[Circular]";
                          }
                          // Store value in our collection
                          cache.push(value);
                      }
                      return value;
                  });
              }
              resp.end(out);
          } catch (e) {
              resp.end(e.stack)
          }
      }
      var local = __dirname + "/public" + req.url
      if (fs.existsSync(local)) {
          if (fs.lstatSync(local).isDirectory(local)) {
              if (fs.existsSync(local + "/index.html")) {
                  local += "/index.html"
                  resp.writeHead(200, {
                      "Content-Type": mime.lookup(local)
                  });
                  fs.readFile(local, function(err, data) {
                      if (err) {
                          resp.writeHead(500, {
                              "Content-Type": "text/plain"
                          });
                          resp.end("Internal server error");
                          throw err;
                      }
                      resp.end(data)
                  });
              } else {
                  server.status_code = 403
                  resp.writeHead(403, {
                      "Content-Type": "text/plain"
                  });
                  resp.end("GET 403 " + http.STATUS_CODES[403] + " " + req.url + "\nThat Directory has no Index")
                  console.log("GET 403 " + http.STATUS_CODES[403] + " " + req.url)
              }
          } else {
              resp.writeHead(200, {
                  "Content-Type": mime.lookup(local)
              });
              fs.readFile(local, function(err, data) {
                  if (err) {
                      resp.writeHead(500, {
                          "Content-Type": "text/plain"
                      });
                      resp.end("Internal server error");
                      throw err;
                  }
                  resp.end(data)
              });
          }
      } else {
          if (req.url != "/action") {
              server.status_code = 404
              resp.writeHead(404, {
                  "Content-Type": "text/plain"
              });
              resp.end("GET 404 " + http.STATUS_CODES[404] + " " + req.url + "\nThat File Cannot be found")
              console.log("GET 404 " + http.STATUS_CODES[404] + " " + req.url)
          }
      }
  });
  var spawn = require('child_process').spawn
  function listen(port) {
      try {
          server.listen(port, "localhost")
      } catch (e) {
          listen(port+1)
      }
  }
  </code></pre>
  
  <hr />
  
  <h1>Solved!</h1>
  
  <p>After combining the answers of both @mscdex and Peter Lyons I have solved the problem.</p>
  
  <pre><code>var spawn = require('child_process').spawn
  server.listen(0,"localhost", function(err) {
      if(err) throw err;
      spawn("open",["http://localhost:"+server.address().port+"/"])
  
  })
  </code></pre>
  
  <p>Thank you to both of you</p>