Javascript 影响输出的函数位置
我正在使用nodejs中的流将POST请求中的数据转换为大写。我有两个代码段,一个工作正常,但另一个代码段的行为不同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
首先,哪个是正确的
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()将在每次请求到来时调用,因此它运行良好。在第二个示例中,您只需调用此函数一次,就可以使用相同的结果