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

我正在处理一个节点项目,我想在退出时写入一些内存。 我认为这很简单:

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

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

此时我尝试处理信号(on。('SIGINT',…)),结果出现错误:

node.js:218 throw e; // process.nextTick错误或第一次打勾时发生'错误'事件^错误:EventEmitter没有这样的模块。 (node.js:403:27)在对象。 (Module.js:452:10)在Module._compile(module.js:434:26)处的C:\ Users \ Mike \ workspace \ NodeDev \ src \ server.js:5: Module.load(module.js:353:32)在Function._load(module.js:310:12)在Array.0(module.js:472:10)在EventEmitter._tickCallback(node.js:209:41) )

closures到一个快速的谷歌和它看来节点根本不处理Windows上的信号和CTRL + C实际上不会触发“退出”事件。 上述错误不应该在* Nix系统上退出。

但是,closuresWindows平台对我来说不是一个有效的select,所以我需要一个解决方法。 有没有办法处理由用户按CTRL + C终止脚本导致的节点中的退出事件?

我使用这段代码来监听密钥。 它似乎也适用于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);