我正在使用nodejs中的流将POST请求中的数据转换为大写。我有两个代码片段,一个工作正常,但另一个片段表现不同
首先,这是正确的
var http = require('http');
var through = require('through');
var server = http.createServer(function (req, res) {
if (req.method === 'POST') {
req.pipe(through(function (buf) {
this.queue(buf.toString().toUpperCase());
})).pipe(res);
}
else res.end('send me a POST\n');
});
server.listen(parseInt(process.argv[2]));
其次,其输出不同
var http = require('http');
var through = require('through');
var tr = through(function(buf) {
this.queue(buf.toString().toUpperCase());
});
var server = http.createServer(function(req, res) {
if(req.method == 'POST') {
req.pipe(tr).pipe(res);
} else {
res.end('Send me a post\n');
}
});
server.listen(parseInt(process.argv[2]));
我唯一注意到的区别是,在第一种情况下,函数是在createServer方法中定义的,第二种情况是在createServer方法之外定义的。这是他们表现不同还是有其他原因的原因?
答案 0 :(得分:1)
在第一个示例中,您为每个请求创建了一个新的through()
流。
在第二个示例中,您创建了一个through()
流,并将其用于每个请求。
答案 1 :(得分:1)
var server = http.createServer(function (req, res) {
if (req.method === 'POST') {
req.pipe(through(function (buf) {
this.queue(buf.toString().toUpperCase());
})).pipe(res);
}
else res.end('send me a POST\n');
});
每当您的请求到来时,through()都会调用,因此它运行良好。在seconde示例中,您只需将此函数调用一次,就可以使用相同的结果。