这是nodeschool.io冒险流课程中的一个练习的解决方案。
我很难理解这条线是如何工作的。
req.pipe(upper).pipe(res) 对内部发生的事情进行深入的解释将是非常感激的。
据我理解,请求将其信息发送到要转换的上级,但是当它通过回调返回时,返回值上是否调用了第二个管道?
var http = require('http');
var fs = require('fs');
var through2 = require('through2');
var upper = through2(function(data, _, next) {
data = data.toString().toUpperCase();
next(null,data);
});
http.createServer(function(req,res) {
if (req.method == 'POST') {
req.pipe(upper).pipe(res);
}
}).listen(process.argv[2]);发布于 2015-08-06 21:54:22
.pipe是糖,而不是多少
req.on('data', function(chunk) {
next_stream.write(chunk);
});
// also handle the 'end' and 'close' events并返回next_stream,以便可以链接.pipes。res是一个可写流,它表示浏览器读取的流,只需将其写入并关闭,以便响应到浏览器,而这正是.pipe所做的。
我想,在这种情况下,没有真正的“回调”来“完成”响应是不值得的。当我们将数据写入res时,浏览器只获取数据,并在关闭res时停止加载更多的数据。
查看NodeJS的 method源代码
https://stackoverflow.com/questions/31866409
复制相似问题