在Windows上处理Node.js中的CTRL + C事件

Ser*_*pth 9 javascript signals node.js

我正在进行一个节点项目,我想在退出时写一些内存到文件.我认为这很简单:

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

但是,当收到CTRL + C时,此代码不会执行(在Windows上).鉴于这是退出Node的实际方法,这似乎有点问题.

此时我尝试处理信号(on.('SIGINT',...)),这导致错误:

node.js:218 throw e; // process.nextTick错误,或第一次勾选时出现'error'事件^错误:在EventEmitter中没有这样的模块.(node.js:403:27)在Object.(C:\ Users\Mike\workspace\NodeDev\src\server.js:5:9)在Module._compile(module.js:434:26)的Object..js(module.js:452:10)at at Module.load(module.js:353:32)位于Array.(load.js:310:12)的Array.0(module.js:472:10),位于EventEmitter._tickCallback(node.js:209:41) )

关闭一个快速的谷歌,似乎 Node根本不处理Windows上的信号,CTRL + C实际上不会触发"退出"事件.上述错误不应在*Nix系统上退出.

但是,关闭Windows平台对我来说不是一个有效的选项,所以我需要一个解决方法.有没有办法处理Node中的On Exit事件,这是由用户按CTRL + C终止脚本引起的?

pim*_*vdb 11

我用这段代码来监听密钥.它似乎也适用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);
Run Code Online (Sandbox Code Playgroud)