【问题标题】:Node's process.stdin readable stream logs Null when read inside a readable event listener callbackNode 的 process.stdin 可读流在可读事件侦听器回调中读取时记录 Null
【发布时间】:2014-05-09 16:04:09
【问题描述】:

在不使用data 事件的情况下,我希望此代码在我按下它时记录每个键的 unicode 引用。我不明白为什么我每次都收到Null

每当我按下键盘上的一个键时,我都会在process.stdin 上触发一个可读事件,运行一个回调,允许我从这个可读流中读取数据。那么为什么它没有保存我的按键数据呢?

// nodo.js

function nodo() { 
  var stdin = process.stdin;
  var stdout = process.stdout;

  if (stdin.isTTY) {
    stdin.setRawMode(true);
    stdin.setEncoding('utf8');
    stdin.resume();
    stdout.write('\u000A>Bienvenido\u000A');      
  } else {
    process.exit();
  }

  stdin.on('readable', function(){

    var input = stdin.read();
    console.log(input);

  });
}

nodo();

感谢您的关注。

【问题讨论】:

    标签: javascript node.js stream command-line-interface


    【解决方案1】:

    请阅读that document 这解释了如何正确处理process.stdin。你的错误是使用stdin.resume 在进程标准输入流上启用“旧”兼容模式。

    // nodo.js
    
    function nodo() { 
        var stdin = process.stdin;
        var stdout = process.stdout;
    
        if (stdin.isTTY) {
            stdin.setRawMode(true);
            stdin.setEncoding('utf8');
            stdout.write('\u000A>Bienvenido\u000A');      
    
            process.stdin.setEncoding('utf8');
    
            process.stdin.on('readable', function() {
                var chunk = process.stdin.read();
                if (chunk !== null) {
                    process.stdout.write('data: ' + chunk);
                }
            });
    
            process.stdin.on('end', function() {
                process.stdout.write('end');
            });
        } else {
            process.exit();
        }
    }
    
    nodo();
    

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 1970-01-01
      • 2014-11-28
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多