影响输出的功能的位置

时间:2014-10-01 14:22:00

标签: javascript node.js

我正在使用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方法之外定义的。这是他们表现不同还是有其他原因的原因?

2 个答案:

答案 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示例中,您只需将此函数调用一次,就可以使用相同的结果。