Próbuję dowiedzieć się, jak wyłączyć wystąpienie Express. Zasadniczo chcę mieć odwrotność .listen(port)
połączenia - jak sprawić, aby serwer Express ZATRZYMAŁ nasłuchiwanie, zwolnił port i zamknął czysto?
Wiem, że może to być dziwne zapytanie, więc oto kontekst; może jest inny sposób podejścia do tego i myślę o tym w niewłaściwy sposób. Próbuję skonfigurować środowisko testowe dla mojej aplikacji socket.io/nodejs. Jest to aplikacja jednostronicowa, więc w moich skryptach testowych (używam Mocha, ale to nie ma znaczenia) Chcę móc uruchomić serwer, przeprowadzić testy, a następnie wyłączyć serwer. Mogę obejść ten problem, zakładając, że albo serwer jest włączony przed rozpoczęciem testu, albo przez jeden z testów uruchamiający serwer i każdy kolejny test zakłada, że jest włączony, ale to naprawdę bałagan. Zdecydowanie wolałbym, aby każdy plik testowy uruchamiał instancję serwera z odpowiednimi ustawieniami, a następnie zamykał ją po zakończeniu testów. Oznacza to, że nie ma żadnych dziwnych zależności od uruchomienia testu i wszystko jest czyste. Oznacza to również, że mogę przeprowadzić testy uruchamiania / zamykania.
Masz jakąś radę, jak to zrobić? Myślałem o ręcznym uruchamianiu wyjątków, aby go wyłączyć, ale wydaje się to kłopotliwe. Przeszukałem dokumenty i źródła Express, ale nie mogę znaleźć żadnej metody, która wyłączyłaby serwer. Może być coś do tego w socket.io, ale ponieważ serwer gniazd jest właśnie podłączony do serwera Express, myślę, że musi to się wydarzyć w warstwie ekspresowej.
server.close()
jeśli dzwonisz z poziomu hooka.Użyj
app.close()
. Pełny przykład:Wywołaj
app.close()
wewnątrz wywołania zwrotnego po zakończeniu testów. Pamiętaj jednak, że proces nadal działa (chociaż już nie nasłuchuje).Jeśli po tym musisz zakończyć proces, zadzwoń
process.exit(0)
.Spinki do mankietów:
app.close: http://nodejs.org/docs/latest/api/http.html#server.close (to samo dotyczy)
process.exit: http://nodejs.org/docs/latest/api/process.html#process.exit
źródło
Wiele razy odpowiadałem na różne warianty „jak zakończyć działanie serwera HTTP” node.jskanały wsparcia. Niestety nie mogłem polecić żadnej z istniejących bibliotek, ponieważ w jakiś sposób im brakuje . Od tego czasu stworzyłem pakiet, który (jak sądzę) obsługuje wszystkie spodziewane przypadki płynnego zakończenia serwera HTTP.
https://github.com/gajus/http-terminator
Główną zaletą terminatora http :
Użycie z Express.js:
źródło
źródło
Możesz to łatwo zrobić, pisząc skrypt bash, aby uruchomić serwer, uruchomić testy i zatrzymać serwer. Ma to tę zaletę, że pozwala na alias do tego skryptu w celu szybkiego i łatwego uruchamiania wszystkich testów.
Używam takich skryptów do całego procesu ciągłego wdrażania. Aby uzyskać więcej informacji na ten temat, należy zapoznać się z przepływem pracy Jona Rohana Dead Simple Git .
źródło