Обработка события CTRL+C в узле.js в Windows

Я работаю над проектом узла, где я хочу записать некоторую память в файл при выходе. Я решил, что это так же просто, как:

process.on('exit', function () {
 //handle your on exit code
 console.log("Exiting, have a nice day");
});

однако этот код не выполняется (в Windows)при получении CTRL+C. Учитывая, что это способ выхода из узла defacto, это кажется немного проблемой.

в этот момент я попытался обработать сигнал (ВКЛ.('SIGINT',...)) вместо этого, что приводит к ошибке:

узел.js: 218 бросить e; // процесс.ошибка nextTick или событие "ошибка" при первом ТИКе ^ Ошибка: нет такого модуля в EventEmitter. (узел.js: 403: 27) на объектах. (C:UsersMikeworkspaceNodeDevsrcserver.js: 5: 9) в модуле._compile (module.js: 434: 26) на объектах..js (module.js: 452: 10) в модуле.загрузочный модуль.js: 353: 32) на работе._загрузочный модуль.js: 310: 12) в массиве.0 (модуль.js: 472: 10) в EventEmitter._tickCallback (узел.js: 209: 41)

Off для быстрого Google и появляется узел просто не обрабатывает сигналы в Windows, а CTRL+C фактически не запускает событие "exit". Вышеуказанная ошибка не должна выходить в системе *Nix.

однако выключение платформы Windows не является допустимым вариантом для меня, поэтому мне нужно обходное решение. Есть ли способ обработки событий выхода в узле, вызванных нажатием пользователем CTRL+C для завершения сценария?

1 ответов


я использовал этот кусок кода для прослушивания для ключей. Кажется, это работает для CTRL + C также В Windows.

но опять же это работает только для CTRL + C как комбинация клавиш, а не что-либо еще. Конечно, вы можете привязать функцию к process.on("exit" и вызывать его внутри if блок ниже.

var tty = require("tty");

process.openStdin().on("keypress", function(chunk, key) {
  if(key && key.name === "c" && key.ctrl) {
    console.log("bye bye");
    process.exit();
  }
});

tty.setRawMode(true);