在 Node.js 中使用 through2 将数据发送到流时额外的换行符
Extra newline while sending data to a stream using through2 in Node.js
我正在学习 NodeSchool 的流冒险研讨会。我要编写一个程序,将 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! ###
#########################################
神秘的额外换行是什么原因造成的,我该如何解决?
您的代码中的第 4 行添加了额外的换行符。要解决此问题,您可以将第 4 行更改为:
this.push(data.toUpperCase() + '\n');
对此:
this.push(data.toUpperCase());
当您在终端中键入此内容时,流冒险课程也会打印他们的参考解决方案
stream-adventure solution
不要在 '\n' 中添加它已经在流中。我猜你得到的缓冲区不止一行,所以 '\n' 是随机添加的。
我正在学习 NodeSchool 的流冒险研讨会。我要编写一个程序,将 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! ###
#########################################
神秘的额外换行是什么原因造成的,我该如何解决?
您的代码中的第 4 行添加了额外的换行符。要解决此问题,您可以将第 4 行更改为:
this.push(data.toUpperCase() + '\n');
对此:
this.push(data.toUpperCase());
当您在终端中键入此内容时,流冒险课程也会打印他们的参考解决方案
stream-adventure solution
不要在 '\n' 中添加它已经在流中。我猜你得到的缓冲区不止一行,所以 '\n' 是随机添加的。