nodeschool stream-adventure#6 concat

时间:2015-10-01 07:00:34

标签: node.js

我从开始就倾向于node.js。 在stream-adventure @ nodeschool中有问题#6,

  

您将在process.stdin上获得文本。缓冲文本并使用反转它   将concat-stream模块写入stdout之前。

这是我的答案:

var concatStream = require('concat-stream');
var through2 = require('through2');
var split = require('split');
var inv = through2(trans, flush);
process.stdin
  .pipe(process.stdout)
  .pipe(concatStream(inv));

function trans (buffer, enc, callback){
  var tr = buffer.toString().split('').reverse().join('');
  this.push(tr);
  callback();
}

function flush (callback){
  callback();
}

我已经检查了解决方案, 但我只想尝试模块"通过2"。

它无法工作(看起来像无限循环), 任何人都可以帮助这个吗? 非常感谢!

1 个答案:

答案 0 :(得分:0)

解决方案是这样的:

const concat = require('concat-stream');
const through = require('through2');
const stream = require('stream');

function allRead(buf){
        const reversed = buf.toString().split('').reverse().join('');
        const streamReversed = stream.Readable.from(reversed); // or console.log(reversed)
        streamReversed.pipe(process.stdout);
}
process.stdin.pipe(concat(allRead));

您只需要将stdin流传输到concat并等待所有数据被收集。最后,反转所有缓冲区(转换为string)并将其发送到stdout(使用控制台日志或新流)。