Estou tentando descobrir como encerrar uma instância do Express. Basicamente, quero o inverso da .listen(port)
chamada - como faço para que um servidor Express PARE de escutar, libere a porta e desligue de forma limpa?
Eu sei que parece ser uma consulta estranha, então aqui está o contexto; talvez haja outra maneira de abordar isso e eu esteja pensando da maneira errada. Estou tentando configurar uma estrutura de teste para meu aplicativo socket.io/nodejs. É um aplicativo de página única, então em meus scripts de teste (estou usando o Mocha, mas isso realmente não importa) Eu quero ser capaz de iniciar o servidor, executar testes nele e, em seguida, desligar o servidor. Posso contornar isso presumindo que o servidor esteja ligado antes do início do teste ou fazendo com que um dos testes inicie o servidor e todos os testes subsequentes presumam que ele está ativo, mas isso é realmente confuso. Eu preferiria que cada arquivo de teste iniciasse uma instância do servidor com as configurações apropriadas e, em seguida, desligasse essa instância quando os testes terminassem. Isso significa que não há dependências estranhas para executar o teste e tudo está limpo. Também significa que posso fazer testes de inicialização / desligamento.
Então, algum conselho sobre como fazer isso? Pensei em disparar exceções manualmente para derrubá-lo, mas isso parece confuso. Procurei nos documentos e na origem do Express, mas não consigo encontrar nenhum método que desligue o servidor. Também pode haver algo no socket.io para isso, mas como o servidor de soquete está apenas conectado ao servidor Express, acho que isso precisa acontecer na camada expressa.
server.close()
se estiver chamando de dentro de um gancho.Use
app.close()
. Exemplo completo:Chame
app.close()
dentro do retorno de chamada quando os testes terminarem. Mas lembre-se de que o processo ainda está em execução (embora não esteja mais ouvindo).Se depois disso você precisar encerrar o processo, ligue
process.exit(0)
.Links:
app.close: http://nodejs.org/docs/latest/api/http.html#server.close (o mesmo se aplica a)
process.exit: http://nodejs.org/docs/latest/api/process.html#process.exit
fonte
Eu respondi uma variação de "como encerrar um servidor HTTP" muitas vezes em diferentes node.jscanais de suporte. Infelizmente, eu não poderia recomendar nenhuma das bibliotecas existentes porque elas estão faltando de uma ou outra forma. Desde então, reuni um pacote que (acredito) está lidando com todos os casos esperados de encerramento normal do servidor HTTP.
https://github.com/gajus/http-terminator
O principal benefício do http-terminator é que:
Uso com Express.js:
fonte
fonte
Você pode fazer isso facilmente escrevendo um script bash para iniciar o servidor, executar os testes e parar o servidor. Isso tem a vantagem de permitir que você crie um alias para esse script para executar todos os seus testes de forma rápida e fácil.
Eu uso esses scripts em todo o meu processo de implantação contínua. Você deve examinar o fluxo de trabalho Dead Simple Git de Jon Rohan para obter alguns insights sobre isso.
fonte