node.js中的through2-map替代[与learnyounode相关]

时间:2015-05-07 18:00:18

标签: javascript node.js stream request response

我正在解决的问题:

编写一个仅接收POST请求的HTTP服务器,并将传入的POST正文字符转换为大写字母并将其返回给客户端。

您的服务器应该侦听程序的第一个参数提供的端口。

我的解决方案

var http = require('http');
var map = require('through2-map')


http.createServer(function(request,response){

    if (request.method == 'POST'){
    request.pipe(map(function (chunk) {
      return chunk.toString().toUpperCase();
    })).pipe(response);



    }

}).listen(process.argv[2]);

我可以实现不使用through2-map吗? 我的瘫痪解决方案不起作用:

 request.on('data',function(data){
     body += data.toString();
     console.log(body);
 });
 request.pipe(body.toUpperCase()).pipe(response);

我能真正做到这一点吗?

1 个答案:

答案 0 :(得分:4)

在第二个代码段中,body.toUpperCase()将在任何'data'事件实际发生之前立即执行。对.on()的调用只会添加事件处理程序,因此会调用它,但还没有调用它。

您可以使用'end' event'data'来等待收到所有data块,准备好大写:

request.on('data', function (data) {
    body += data.toString();
});

request.on('end', function () {
    response.end(body.toUpperCase());
});

注意:确保声明body并为其分配初始值:

var body = '';

response.on('data', ...);

// ...