【问题标题】:Extra newline while sending data to a stream using through2 in Node.js在 Node.js 中使用 through2 将数据发送到流时的额外换行符
【发布时间】:2015-09-30 13:33:21
【问题描述】:

我正在浏览 NodeSchool 的流式冒险workshopper。我要编写一个程序,将 process.stdin 流通过管道传输到使用 through2 模块创建的流,然后将其通过管道传输到 process.stdout。使用 through2 模块创建的流会将输入流字符转换为大写,并将其通过管道传输到 process.stdout。以下是我的源代码:

var through = require('through2');
var write = function(buffer,encoding,next){
        var data = buffer.toString();
        this.push(data.toUpperCase() + '\n');
        next();
}
var end = function (done){
        done();
}
var stream = through(write,end);
process.stdin.pipe(stream).pipe(process.stdout);

问题是在每 8 个单词块发送到流中后,会打印一个额外的换行符。以下是来自 Workshopper 验证的 3 个测试输出:

测试 1:

TAP version 13
# (anonymous)
ok 1 stream-adventure verify YOURFILE.js
not ok 2 should be equal
  ---
    operator: equal
    expected:
      'METALKIND\nKORVEN\nOSIRIAN\nTHE ERGON\nTYTHONIAN\nLAND OF FICTION BEINGS\nSIRIAN\nKRAAL\nTHE FLOOD\nJADONDAN\n'
    actual:
      'METALKIND\nKORVEN\nOSIRIAN\nTHE ERGON\nTYTHONIAN\nLAND OF FICTION BEINGS\nSIRIAN\nKRAAL\n\nTHE FLOOD\n\nJADONDAN\n\n'
  ...
ok 3 successful exit code

1..3
# tests 3
# pass  2
# fail  1

#########################################
###   YOUR SOLUTION IS NOT CORRECT!   ###
#########################################

测试 2:

TAP version 13
# (anonymous)
ok 1 stream-adventure verify YOURFILE.js
not ok 2 should be equal
  ---
    operator: equal
    expected:
      'THE BEAST\nANDROZANI TREE\nGAZTAK\nRAXACORICOFALLAPATORIAN\nMAYFLY\nSTIGORAX\nTHE TRICKSTER\nMEGARA\nMENTOR\nHAND OF OMEGA\n'
    actual:
      'THE BEAST\nANDROZANI TREE\nGAZTAK\nRAXACORICOFALLAPATORIAN\nMAYFLY\nSTIGORAX\nTHE TRICKSTER\nMEGARA\nMENTOR\n\nHAND OF OMEGA\n\n'
  ...
ok 3 successful exit code

1..3
# tests 3
# pass  2
# fail  1

#########################################
###   YOUR SOLUTION IS NOT CORRECT!   ###
#########################################

测试 3:

TAP version 13
# (anonymous)
ok 1 stream-adventure verify YOURFILE.js
not ok 2 should be equal
  ---
    operator: equal
    expected:
      'QETESH\nPELUSHI\nLURMAN\nEVE\nATRAXI\nFLESHKIND\nDALEK\nGEE-JEE FLY\nHEADLESS MONK\nTHE DESTROYER\n'
    actual:
      'QETESH\nPELUSHI\nLURMAN\nEVE\nATRAXI\nFLESHKIND\nDALEK\nGEE-JEE FLY\n\nHEADLESS MONK\n\nTHE DESTROYER\n\n'
  ...
ok 3 successful exit code

1..3
# tests 3
# pass  2
# fail  1

#########################################
###   YOUR SOLUTION IS NOT CORRECT!   ###
#########################################

神秘的额外换行符的原因是什么,我该如何解决?

【问题讨论】:

    标签: node.js stream stdout stdin


    【解决方案1】:

    代码中的第 4 行添加了额外的换行符。要解决此问题,您可以更改第 4 行:

    this.push(data.toUpperCase() + '\n');
    

    到这里:

    this.push(data.toUpperCase());
    

    当您在终端中键入此内容时,流式冒险课程也会打印出他们的参考解决方案

    stream-adventure solution 
    

    【讨论】:

      【解决方案2】:

      不要在 '\n' 中添加它已经在流中。我猜你得到的缓冲区不止一行,所以'\n'是随机添加的。

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 2018-03-03
        • 2014-06-04
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 2020-02-08
        • 2020-08-08
        相关资源
        最近更新 更多