Node.js Raw Mode se stisky kláves

Věci, které lidé dělají s Node.js, považuji za neuvěřitelně zajímavé. Jste zde o lidech, kteří používají Node.js k ovládání dronů, Arduin a řady dalších zařízení. Využil jsem Node.js k vytvoření Roku Remote, projektu, který byl zábavný a jednodušší, než jsem si myslel, že bude. Jedna část tohoto experimentu však byla obtížná: naslouchání úhozům kláves ve stejném prostředí, které spustilo skript.

Postup použití dálkového ovladače je následující:

  1. Spusťte skript pro připojení k zařízení Roku: node remote
  2. Ve stejném prostředí použijte šipky a horké klávesy k procházení Roku
  3. Stiskněte CONTROL+C zabít skript

Následující kód JavaScript je to, co jsem potřeboval použít k naslouchání úhozům ve stejném prostředí, jakmile byl skript spuštěn:

// Readline lets us tap into the process events
const readline = require('readline');

// Allows us to listen for events from stdin
readline.emitKeypressEvents(process.stdin);

// Raw mode gets rid of standard keypress events and other
// functionality Node.js adds by default
process.stdin.setRawMode(true);


// Start the keypress listener for the process
process.stdin.on('keypress', (str, key) => {

    // "Raw" mode so we must do our own kill switch
    if(key.sequence === '\u0003') {
        process.exit();
    }

    // User has triggered a keypress, now do whatever we want!
    // ...

});

Výše uvedený kód změní váš skript Node.js na aktivní drát pro poslech událostí stisku kláves. S mým Roku Remote předávám události stisku šipky a písmena přímo do Roku přes REST API (úplný kód zde). Líbí se mi, že to díky Node.js bylo tak snadné – další důvod, proč JavaScript vždy vítězí!