2014-10-13 26 views
7

Vorrei chiedere all'utente di immettere input, consentire all'utente di immettere più righe di testo, premere invio tra ogni riga, quindi terminare l'input premendo CTRL + D o qualcosa del genere.Node.js multiline input

Con "keypress", posso catturare l'EOF, ma dovrei gestire manualmente tutte le echi, la gestione del backspace, le sequenze di escape del terminale, ecc. Sarebbe molto meglio se potessi usare "readline", ma in qualche modo intercettare il CTRL + D (EOF) con "keypress", ma non sono sicuro di come andrei su questo.

risposta

10

Offriamo le line e close eventi:

var readline = require('readline'); 

var input = []; 

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout 
}); 

rl.prompt(); 

rl.on('line', function (cmd) { 

    input.push(cmd); 
}); 

rl.on('close', function (cmd) { 

    console.log(input.join('\n')); 
    process.exit(0); 
});