Estoy tratando de averiguar cómo cerrar una instancia de Express. Básicamente, quiero lo contrario de la .listen(port)
llamada: ¿cómo hago para que un servidor Express DEJE de escuchar, libere el puerto y se apague limpiamente?
Sé que parece que puede ser una consulta extraña, así que aquí está el contexto; tal vez haya otra forma de abordar esto y lo estoy pensando de manera incorrecta. Estoy intentando configurar un marco de prueba para mi aplicación socket.io/nodejs. Es una aplicación de una sola página, así que en mis scripts de prueba (estoy usando Mocha, pero eso realmente no importa) Quiero poder iniciar el servidor, ejecutar pruebas en él y luego apagar el servidor. Puedo solucionar esto asumiendo que el servidor está encendido antes de que comience la prueba o haciendo que una de las pruebas inicie el servidor y que cada prueba posterior asuma que está funcionando, pero eso es realmente complicado. Preferiría que cada archivo de prueba inicie una instancia de servidor con la configuración adecuada y luego cierre esa instancia cuando terminen las pruebas. Eso significa que no hay dependencias extrañas para ejecutar la prueba y todo está limpio. También significa que puedo hacer pruebas de inicio / apagado.
Entonces, ¿algún consejo sobre cómo hacer esto? He pensado en activar excepciones manualmente para eliminarlo, pero eso parece complicado. He revisado los documentos y la fuente de Express, pero parece que no puedo encontrar ningún método que apague el servidor. También podría haber algo en socket.io para esto, pero dado que el servidor de socket está conectado al servidor Express, creo que esto debe suceder en la capa express.
server.close()
si llama a esto desde un gancho.Utilice
app.close()
. Ejemplo completo:Llame
app.close()
dentro de la devolución de llamada cuando las pruebas hayan terminado. Pero recuerde que el proceso aún se está ejecutando (aunque ya no se escucha).Si después de esto, necesita finalizar el proceso, llame
process.exit(0)
.Enlaces:
app.close: http://nodejs.org/docs/latest/api/http.html#server.close (se aplica lo mismo)
process.exit: http://nodejs.org/docs/latest/api/process.html#process.exit
fuente
He respondido una variación de "cómo terminar un servidor HTTP" muchas veces en diferentes node.jscanales de apoyo. Desafortunadamente, no pude recomendar ninguna de las bibliotecas existentes porque faltan de una manera u otra. Desde entonces, he creado un paquete que (creo) está manejando todos los casos que se esperan de una terminación elegante del servidor HTTP.
https://github.com/gajus/http-terminator
El principal beneficio de http-terminator es que:
Uso con Express.js:
fuente
fuente
Puede hacer esto fácilmente escribiendo un script bash para iniciar el servidor, ejecutar las pruebas y detener el servidor. Esto tiene la ventaja de permitirle asignar un alias a ese script para ejecutar todas sus pruebas rápida y fácilmente.
Utilizo estos scripts para todo mi proceso de implementación continua. Debería consultar el flujo de trabajo Dead Simple Git de Jon Rohan para obtener información sobre esto.
fuente