Node.js' http.Server and http.createServer, what's the difference?

javascript, node.js

Solution

Based on the source code of nodejs (extract below), `createServer` is just a helper method to instantiate a `Server`.

Extract from line 1674 of http.js.

exports.Server = Server;


exports.createServer = function(requestListener) {
  return new Server(requestListener);
};

So therefore the only true difference in the two code snippets you've mentioned in your original question, is that you're not using the `new` keyword.

For clarity the `Server` constructor is as follows (at time of post - 2012-12-13):

function Server(requestListener) {
  if (!(this instanceof Server)) return new Server(requestListener);
  net.Server.call(this, { allowHalfOpen: true });

  if (requestListener) {
    this.addListener('request', requestListener);
  }

  // Similar option to this. Too lazy to write my own docs.
  // http://www.squid-cache.org/Doc/config/half_closed_clients/
  // http://wiki.squid-cache.org/SquidFaq/InnerWorkings#What_is_a_half-closed_filedescriptor.3F
  this.httpAllowHalfOpen = false;

  this.addListener('connection', connectionListener);

  this.addListener('clientError', function(err, conn) {
    conn.destroy(err);
  });
}
util.inherits(Server, net.Server);

Problem

What is the difference between: http.Server(function(req,res) {}); and http.createServer(function(req, res) {});

Original source