Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 影响输出的函数位置_Javascript_Node.js - Fatal编程技术网

Javascript 影响输出的函数位置

Javascript 影响输出的函数位置,javascript,node.js,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(functio

我正在使用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方法外部定义的。这是它们行为不同的原因还是其他原因?

在第一个示例中,通过()为每个请求创建一个新的

在第二个示例中,创建一个
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');
    });
through()将在每次请求到来时调用,因此它运行良好。在第二个示例中,您只需调用此函数一次,就可以使用相同的结果