【问题标题】:Is it possible to pipe to console.log?是否可以通过管道传输到 console.log?
【发布时间】:2014-08-17 02:49:46
【问题描述】:

我正在尝试学习 node.js。

我正在尝试理解流和管道。

是否可以将http请求的响应通过管道传输到console.log?

我知道如何通过将处理程序绑定到数据事件来做到这一点,但我更感兴趣的是流式传输到控制台。

http.get(url, function(response) {
  response.pipe(console.log);
  response.on('end', function() {
    console.log('finished');
  });
});

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

    console.log 只是一个将流程流通过管道传输到输出的函数。

    注意以下是示例代码

    console.log = function(d) {
      process.stdout.write(d + '\n');
    };
    

    process.stdout 的管道完全相同。

    http.get(url, function(response) {
      response.pipe(process.stdout);
      response.on('end', function() {
        console.log('finished');
      });
    });
    

    注意你也可以这样做

    process.stdout.write(response);
    

    【讨论】:

    • FWIW,process.stdout 是一个可写流,因此不会发出 'end' 此外,由于其特殊状态,它也不会发出 'finish'。
    • 这对我不起作用UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Invalid data, chunk must be a string or buffer, not object
    • @Tyguy7 什么?首先,这是从你没有捕捉到的承诺中抛出的,然后阅读错误消息。您传递的是一个对象,而不是流或缓冲区。
    • 我现在意识到我试图通过管道传输到标准输出的响应对象实际上是使用 request.js 的响应对象,而不是 http。
    • 我得到了 Tyguy 得到的相同(内部)错误,也提到了 in this GH issue,如果我将 pipe 发送到标准输出,它会抛出,但如果我 .on("data", console.log) 它完全按预期工作。所以,这是这个答案不正确的一种情况,我认为是因为 console.log 对非字符串输入做了一些额外的处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2012-09-08
    • 2018-07-30
    • 2015-09-18
    • 2012-04-18
    相关资源
    最近更新 更多