node.jsで標準入力から1行ごと同期読み込み

2015-02-18

node.jsというかJavaScriptは非同期処理が基本で、ファイル読み込みなどはコールバックで受け取る形になるが、簡単のために、従来的な同期読み込みで処理させたい。

エコー:

const fs = require('fs');
function readline() {
var result = fs.readSync(process.stdin.fd, 100000, null, 'utf-8');
// [読み込んだ内容(文字列), バイト数]
if (result[1] === 0)
return null;
return result[0];
}

var line;
while (line = readline()) {
process.stdout.write(line);
}
  • fs.readSyncのManualを見ても、引数も戻り値もまったく違うんだけどなんなのこれ?

これでも動く:

const fs = require("fs");
var readline = (function() {
var BUFFER_SIZE = 4096;
var buffer = new Buffer(BUFFER_SIZE);
return function() {
var n = fs.readSync(process.stdin.fd, buffer, 0, BUFFER_SIZE);
if (n <= 0)
return null;
return buffer.slice(0, n).toString();
};
})();

var line;
while (line = readline()) {
process.stdout.write(line);
}