Я пытаюсь понять, как закрыть экземпляр Express. В принципе, мне нужен обратный .listen(port)
вызов - как заставить сервер Express ОСТАНОВИТЬ прослушивание, освободить порт и аккуратно завершить работу?
Я знаю, что это может показаться странным вопросом, так что вот контекст; может быть, есть другой способ подойти к этому, и я ошибаюсь в этом. Я пытаюсь настроить среду тестирования для своего приложения socket.io/nodejs. Это одностраничное приложение, поэтому в моих сценариях тестирования (я использую Mocha, но на самом деле это не имеет значения) Я хочу иметь возможность запускать сервер, запускать тесты, а затем выключать сервер. Я могу обойти это, предположив, что либо сервер включен до начала теста, либо если один из тестов запускает сервер и каждый последующий тест предполагает, что он работает, но это действительно беспорядочно. Я бы предпочел, чтобы каждый тестовый файл запускал экземпляр сервера с соответствующими настройками, а затем выключал этот экземпляр после завершения тестов. Это означает, что при запуске теста нет никаких странных зависимостей, и все чисто. Это также означает, что я могу проводить тестирование при запуске / завершении работы.
Итак, какие-нибудь советы о том, как это сделать? Я думал о ручном запуске исключений, чтобы его отключить, но это кажется беспорядочным. Я просмотрел документы и исходный код Express, но, похоже, не могу найти никакого метода, который отключит сервер. Для этого также может быть что-то в socket.io, но поскольку сервер сокетов просто подключен к серверу Express, я думаю, что это должно происходить на уровне express.
server.close()
если вы вызываете его из хука.Используйте
app.close()
. Полный пример:Вызовите
app.close()
внутри обратного вызова после завершения тестов. Но помните, что процесс все еще выполняется (хотя он больше не слушает).Если после этого вам нужно завершить процесс, то звоните
process.exit(0)
.Ссылки:
app.close: http://nodejs.org/docs/latest/api/http.html#server.close (то же самое касается)
process.exit: http://nodejs.org/docs/latest/api/process.html#process.exit
источник
Я много раз отвечал на вопрос «как завершить работу HTTP-сервера» на разных node.jsканалы поддержки. К сожалению, я не могу рекомендовать какой - либо из существующих библиотек , поскольку они отсутствуют в том или ином пути. С тех пор я собрал пакет, который (как мне кажется) обрабатывает все случаи, ожидаемые от корректного завершения работы HTTP-сервера.
https://github.com/gajus/http-terminator
Основное преимущество http-terminator заключается в том, что:
Использование с Express.js:
источник
источник
Вы можете легко сделать это, написав сценарий bash для запуска сервера, запуска тестов и остановки сервера. Это имеет то преимущество, что вы можете использовать псевдоним для этого сценария для быстрого и легкого выполнения всех ваших тестов.
Я использую такие сценарии для всего процесса непрерывного развертывания. Вам следует взглянуть на Dead Simple Git Workflow Джона Рохана, чтобы получить некоторое представление об этом.
источник