2012-03-31 17 views
19

Estoy tratando de poder cambiar básicamente los puertos en los que se ejecuta mi aplicación exprés.Detener y reiniciar mediante programación los servidores Express (para cambiar los puertos)

que he probado:

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

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

Esto devuelve un error de Node.js críptica. Estoy ejecutando el nodo v0.4.11, estoy actualizando ahora para ver si eso lo soluciona.

EDITAR Aquí está el error:

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

Gracias, Matt

+0

'.listen' es asíncrono, por lo que intentará cerrarse antes de que esté abierto. Pruebe 'server.listen (8080, function() {server.close();});', quizás eso funcione. – loganfsmyth

+1

¿Qué error estás recibiendo? – Brad

+0

Error de aserción: (! Io-> watcher_.active), función Establecer, archivo ../src/node_io_watcher.cc, línea 160. – Matt

Respuesta

26

La cuestión es que .listen es asíncrona. Llamando al .close inmediatamente después de llamar al .listen, lo está cerrando antes de que se haya abierto.

Pruebe esto en su lugar.

server.listen(8080, function() { 
    server.close(); 
}); 
+2

#close también es asincrónico. Tiene una devolución de llamada, que solo se activa cuando el servidor ha terminado de tratar con las conexiones sobrantes – rocketspacer

Cuestiones relacionadas