Node.js 中 through2-map 的替代方案 [与 learnyounode 相关]

iga*_*rav 3 javascript response stream request node.js

我正在解决的问题:

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

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

我的解决方案

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]);
Run Code Online (Sandbox Code Playgroud)

我可以在不使用 through2-map 的情况下实现吗?
我的解决方案不起作用:

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

我可以做真正困难的事情吗?

Jon*_*ski 5

在第二个片段中,body.toUpperCase()将在任何事件'data'实际发生之前立即采取行动。调用.on()仅添加事件处理程序,以便调用它,但尚未调用它。

您可以使用'end'事件和 来'data'等待data接收所有块,准备好大写:

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

request.on('end', function () {
    response.end(body.toUpperCase());
});
Run Code Online (Sandbox Code Playgroud)

注意:确保body正在声明并分配初始值:

var body = '';

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

// ...
Run Code Online (Sandbox Code Playgroud)