我一直在浏览nodeschool.io的教程,并且对涉及流的特定问题感到难过。这是给定的解决方案。
我主要对上变量以及为什么我需要调用this.push感到困惑。我不能通过回调函数(next())传递数据变量吗?
对此处发生的事情进行逐行解释将是最受欢迎的。
var http = require('http');
var fs = require('fs');
var through2 = require('through2');
var upper = through2(function(data, _, next) {
data = data.toString().toUpperCase();
this.push(data);
next();
});
http.createServer(function(req,res) {
if (req.method == 'POST') {
req.pipe(upper).pipe(res);
}
}).listen(process.argv[2]);
答案 0 :(得分:2)
这就是for2功能的API如何工作。来自documentation
transformFunction必须具有以下签名:function(chunk,encoding,callback){}。最小的实现应调用回调函数来指示转换已完成,即使该转换意味着丢弃块。
要对新块进行排队,请调用this.push(chunk) - 如果要发送多个部分,可以在回调()之前根据需要调用多次。
显然,this.push的原因是让你很容易处理你需要推出大量块的情况。
for(var i=1; i<=10; i++){
this.push( /**/ )
}
那就是说,根据文档,你也可以像你想要的那样将块传递给回调:
或者,您可以使用回调(错误,块)作为发出单个块或错误的简写。
我无法测试,但我猜你想要类似于
的东西var upper = through2(function(data, _, next) {
data = data.toString().toUpperCase();
next(null, data);
});