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

标签 javascript node.js stream request response

我正在解决的问题:

编写一个仅接收 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]);

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

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

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

最佳答案

在第二个片段中,body.toUpperCase() 将在任何 'data' 事件实际发生之前立即执行。对 .on() 的调用仅添加了事件处理程序,因此它会被调用,但尚未调用它。

您可以使用 'end' event ,与 'data' 一起,等待接收所有 data block ,准备大写:

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

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

注意:确保 body 被声明并分配了一个初始值:

var body = '';

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

// ...

关于javascript - 替代 node.js 中的 through2-map [与 learnyounode 相关],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108484/

相关文章:

php - 有没有办法在浏览器中捕获所有键盘输入?

javascript - 客户端 JavaScript 和/或 JavaScript 代码使用 jquery 调用 WCF 服务检索 System.IO.Stream 的集合?

c# - 如何缓冲输入流直到完成

javascript - Backbone 关系中的更改事件不起作用

javascript - 使用 chrome.storage.local.get 获取值并将其分配给变量

javascript - ReferenceError : function is not defined, 从异步函数调用常规函数

node.js - 有没有办法在退出时在 Node js 中启动异步操作?

javascript - 使用 Node.js 从 MySQL 数据库进行 Ext js 树延迟加载

javascript - pipe(Node.js 的流)和 bl(BufferList)如何协同工作?

javascript - 根据换行符将字符串数据拆分为数组,然后是两位数