Недавно я занимался закрытием проекта, написанного на Node.js. Хотя это и не сложно, я хотел найти лучшую альтернативу обычному способу. Обычно у нас есть некоторые модули, которые нам нужно очистить в определенном порядке, и эти модули предоставят нам некоторые функции для этого. Эти функции часто являются асинхронными или генерируют событие/принимают функцию обратного вызова, когда они закрыты. Мы можем прослушивать такие сигналы, как SIGINT
и SIGKILL
, с помощью process.on()
и делать все необходимое, прежде чем вызывать process.exit()
для завершения процесса.
Обычный способ сделать это, который часто рекомендуют в Интернете, обычно выглядит примерно так:
Когда наш Node-процесс получает сигнал SIGINT
, мы закрываем наш сервер. Функция close
нашего сервера принимает функцию в качестве аргумента и вызывает ее, когда сервер генерирует событие closed
(мы могли бы добиться того же с помощью server.on('close', () => …)
. Наша база данных также предоставляет функцию close
, и она является асинхронной. Когда обещание разрешается, мы можем закончить процесс с process.exit
.
Мы можем легко улучшить это несколькими способами. Во-первых, мы можем использовать async/await
, чтобы дождаться закрытия нашей базы данных, прежде чем делать что-либо еще, что нам нужно сделать, и выйти. Однако мы все еще застряли с этим server.close
, но мы можем воспользоваться библиотекой событий Node, чтобы превратить это в обещание и также ожидать его. Конечный результат намного приятнее и управляемее.
Я надеюсь, что это дало вам некоторые идеи о демонтаже проектов Node. Буду рад услышать о любых альтернативах, улучшениях или вопросах, о которых вы можете подумать.