CTRL+C detecteren in Node.js

Ik kreeg deze code van een andere SO-vraag, maar het knooppunt klaagde om process.stdin.setRawMode te gebruiken in plaats van tty, dus ik heb het gewijzigd.

Vroeger:

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

Na:

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

In ieder geval, het creëert gewoon een totaal niet-reagerend knooppuntproces dat niets doet, waarbij de eerste klaagt over tty, dan een foutmelding geeft, en de tweede gewoon niets doet en Node’s native CTRL+Chandler, dus het sluit het knooppunt niet eens af als ik erop druk. Hoe kan ik succesvol omgaan met Ctrl+Cin Windows?


Antwoord 1, autoriteit 100%

Als u het onderbrekingssignaal SIGINTprobeert op te vangen, hoeft u niet vanaf het toetsenbord te lezen. Het processobject van nodejsonthult een interruptgebeurtenis:

process.on('SIGINT', function() {
    console.log("Caught interrupt signal");
    if (i_should_exit)
        process.exit();
});

Bewerken: werkt niet op Windows zonder een tijdelijke oplossing. Zie hier


Antwoord 2, autoriteit 3%

Voor degenen die de functionaliteit nodig hebben, vond ik death (npm nodule, hah!).

Auteur beweert ookdat het op Windows werkt:

Het is alleen getest op POSIX-compatibele systemen. Hier is een leuke discussie over Windows-signalen, blijkbaar is dit opgelost/in kaart gebracht.

Ik kan bevestigen dat CTRL+Cwerkt op win32 (ja, ik ben verrast).

Other episodes