2012-02-08 13 views
9

Estoy trabajando en un proyecto de nodo donde quiero escribir algo de memoria al archivo al salir. Me imaginé que era tan simple como:Manejando el evento CTRL + C en Node.js en Windows

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

Sin embargo, este código no se ejecuta (en Windows) cuando se recibe CTRL + C. Dado que esta es la manera defacta de salir de Node, esto parece un problema.

En este momento me trataron de manejar la señal de cambio, lo que resulta en el error (en ('SIGINT', ...).):

node.js:218 throw e; // process.nextTick error, or 'error' event on first tick ^Error: No such module at EventEmitter. (node.js:403:27) at Object. (C:\Users\Mike\workspace\NodeDev\src\server.js:5:9) at Module._compile (module.js:434:26) at Object..js (module.js:452:10) at Module.load (module.js:353:32) at Function._load (module.js:310:12) at Array.0 (module.js:472:10) at EventEmitter._tickCallback (node.js:209:41)

Off para una rápida Google y it appears Nodo simplemente no maneja señales en Windows y CTRL + C de hecho no activa el evento de "salida". El error anterior no debería salir en un sistema * Nix.

Sin embargo, desactivar la plataforma de Windows no es una opción válida para mí, así que necesito una solución. ¿Hay alguna forma de controlar los eventos On Exit en Node causados ​​por el hecho de que el usuario presione CTRL + C para finalizar el script?

Respuesta

11

Utilicé este fragmento de código para escuchar las teclas. Parece funcionar también para CTRL + C en Windows.

Pero de nuevo solo funciona para CTRL + C como combinación de teclas, nada más. Por supuesto, ambos pueden vincular una función al process.on("exit", y llamarla dentro del bloque if a continuación.

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); 
+1

Buena solución. Se siente un poco ... sucio, pero luego, ¡a menudo funciona! Gracias. – Serapth

Cuestiones relacionadas