Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically stop and restart express servers (to change ports)

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

like image 955
Matt Avatar asked Mar 31 '12 20:03

Matt


2 Answers

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();
});
like image 133
loganfsmyth Avatar answered Oct 13 '22 19:10

loganfsmyth


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 :('); });
});
like image 39
Derek Hill Avatar answered Oct 13 '22 19:10

Derek Hill