ENOTCONN带有用于process.stdout和process.stderr的管道

时间:2019-06-01 19:36:53

标签: javascript node.js

创建了一个访问和错误管道或可写流,以将console.log或console.error写入文件流。

var fs = require("fs");
var access = fs.createWriteStream('/node.access.log', { flags: 'a' });
var error = fs.createWriteStream('/node.error.log', { flags: 'a' });
process.stdout.pipe(access); // redirect stdout / stderr
process.stderr.pipe(error);

我的期望是,每当我执行console.logconsole.error时,它将被写入文件输出流。

我遇到错误

Error: read ENOTCONN
    at Socket._read (net.js:528:20)
    at Socket.Readable.read (_stream_readable.js:457:10)
    at resume_ (_stream_readable.js:936:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:9)
Emitted 'error' event at:
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:9) {
  errno: 'ENOTCONN',
  code: 'ENOTCONN',
  syscall: 'read'
}

1 个答案:

答案 0 :(得分:0)

这是因为process.stdout是可写流,而不是可读(或双工)流,因此无法绑定到其事件。

您可以使用双工流覆盖全局process.stdout(将原始流保留在另一个全局变量中之后,否则您将需要使用net写入文件描述符IO