Tamas Tamas - 6 months ago 178
Node.js Question

Express.js - app.listen vs server.listen

This may be a very basic question but I simply don't get it. What is the difference between creating an app using Express.js and starting the app listening on port 1234 for example:

var express = require('express');
var app = express();

//app.configure, app.use etc

app.listen(1234);


and adding an http server:

var express = require('express'), http = require('http');
var app = express();
var server = http.createServer(app);

//app.configure, app.use etc

server.listen(1234);


What's the difference? If I navigate to
http://localhost:1234
- I get the same output...

Answer

The second form (creating an HTTP server yourself, instead of having Express create one for you) is useful if you want to reuse the HTTP server, for example to run socket.io within the same HTTP server instance:

var express = require('express');
var app     = express();
var server  = require('http').createServer(app);
var io      = require('socket.io').listen(server);
...
server.listen(1234);

However, app.listen() also returns the HTTP server instance, so with a bit of rewriting you can achieve something similar without creating an HTTP server yourself:

var express   = require('express');
var app       = express();
var socketio  = require('socket.io');

// app.use/routes/etc...

var server    = app.listen(3033);
var io        = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
  ...
});
Comments