2012-02-08 12 views
9

Sto lavorando a un progetto di nodo in cui voglio scrivere un po 'di memoria su file all'uscita. Ho pensato che fosse il più semplice:Gestione evento CTRL + C in Node.js su Windows

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

Tuttavia, questo codice non esegue (su Windows) quando si riceve CTRL + C. Dato che questo è il modo defacto per uscire dal nodo, questo sembra un po 'un problema.

A questo punto ho cercato di gestire il segnale, invece, che genera l'errore (il ('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)

fuori ad un rapido Google e it appears Nodo semplicemente non gestisce i segnali su Windows e CTRL + C non avvia infatti l'evento "exit". L'errore precedente non dovrebbe uscire su un sistema * Nix.

Tuttavia, spegnere la piattaforma Windows non è un'opzione valida per me, quindi ho bisogno di una soluzione alternativa. C'è un modo per gestire gli eventi di uscita in uscita nel nodo causati dall'utente che preme CTRL + C per terminare lo script?

risposta

11

Ho usato questo pezzo di codice per l'ascolto delle chiavi. Sembra funzionare per CTRL + C anche su Windows.

Ma di nuovo funziona solo per CTRL + C come combinazione di tasti, non altro. Naturalmente, è possibile associare una funzione a process.on("exit" e chiamarla all'interno del blocco if di seguito.

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

Soluzione piacevole. Si sente un po '... sporco, ma poi, lavorare spesso è farlo! Grazie. – Serapth