ENOTCONN 通过管道连接到 process.stdout 和 process.stderr

App*_*per 6 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);
Run Code Online (Sandbox Code Playgroud)

我的期望是每当我这样做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'
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*ton 1

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

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