检测按键事件node.js rawmode中的input

我正在写一个简单的命令行工具来允许命令行input到一个node.js服务器。 我试图做一个缓冲区,所以用户可以按下并看到最后一个命令。 为此我已经设置

require('tty').setRawMode(true); 

并检测所有按键:

 process.stdin.on('keypress', function (letter, key) { if (key && key.ctrl && key.name == 'c') { process.exit(); } else if (key && key.enter) { write(letter); msgFired(buffer[bufferPos]); bufferPos += 1; buffer[bufferPos] = ""; } else { write(letter); buffer[bufferPos] += letter; } }); 

这不检测enter-press。

是否有一种方法来检测整个线路何时触发(如RawMode为false时)与按键事件? 如果没有,我如何检测input?

据我所知,你唯一的错误是这样的:

 else if (key && key.enter) { 

应该是这样的:

 else if (key && key.name == 'enter') { 

我自己find了解决办法。 要检查input,相应的testing是:

 if (key && key.name == 'enter') 

这是一个很好的解决scheme:

 var allowedKeys = "abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ1234567890!- "; process.stdin.on('keypress', function (letter, key) { if (key && key.ctrl && key.name == 'c') { listen = false; log(""); process.exit(); } else if (key && key.name == 'enter') { write('\n'); msgFired(buffer[bufferPos]); buffer[bufferPos] = ""; } else if (allowedKeys.indexOf(letter) != -1) { write(letter); buffer[bufferPos] += letter; } }); 

键名(key.name)很容易猜到。 标签是'tab',input是'enter',向上箭头是'up'等。

我希望这对任何人都有帮助

编辑:请注意,我添加了一个允许的字符的列表,所以代码不会像奇怪的字符像ctrl + 3崩溃。