2014-05-09 40 views
2

不使用data事件,我希望此代碼記錄每個鍵的unicode引用,因爲我將其按下。我不明白爲什麼我每次都得到Null節點的process.stdin可讀流日誌在可讀事件偵聽器回調中讀取時爲空

每當我按下我的鍵盤上的一個鍵,我會觸發一個可讀的事件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(); 

running the code

我感謝您的關注。

回答

1

請仔細閱讀that document ,說明如何正確處理process.stdin。您的錯誤是使用stdin.resume 啓用進程stdin流的「舊」兼容模式。

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