Programmatically stop and restart express servers (to change ports)


Question

I'm looking to be able to basically change ports that my express app is running on.

I've tried:

server.on('close', function() {
  server.listen(3000);
});

server.listen(8080);
server.close();

This returns a cryptic node.js error. I'm running node v0.4.11, I'm upgrading now to see if that fixes it.

EDIT Here's the error:

Assertion failed: (!io->watcher_.active), function Set, file ../src/node_io_watcher.cc, line 160.

Thanks, Matt

1
24
3/31/2012 9:03:12 PM

Accepted Answer

The issue is that .listen is asynchronous. By calling .close immediately after calling .listen, you are closing it before it has been opened.

Try this instead.

server.listen(8080, function() {
  server.close();
});
35
3/31/2012 9:09:16 PM

Thanks to @aymericbeaumet, the following snippet works with Express 4:

var app = express();

var server = app.listen(8080, function() {
  console.log('Listening :)');
  server.close(function() { console.log('Doh :('); });
});

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon