Это довольно запутанное поведение при изучении потоков / http на NodeJS. По умолчанию intellisense автоматически завершает pipe
на http.ClientRequest
и http.ServerResponse
, это вводит в заблуждение, поскольку нет смысла передавать поток для записи.
Для отслеживания: из Документы , похоже, что http.ClientRequest
и http.ServerResponse
расширяются <Stream>
, а http.IncomingMessage
расширяется <stream.Readable>
. Но, если мы рассмотрим исходный код, выяснится, что ClientRequest extends OutgoingMessage extends stream.Writable
и ServerResponse extends OutgoingMessage extends stream.Writable
, а также IncomingMessage extends stream.Readable
. Итак, я бы ожидал, что http.ClientRequest instanceof stream.Writable
будет true
и http.ServerResponse instanceof stream.Writable
будет true
. Но это не тот случай.
Тест:
http.createServer((request, response) => {
request instanceof http.IncomingMessage // => true
request instanceof stream.Readable // => true
request instanceof stream.Stream // => true
response instanceof http.OutgoingMessage // => true
response instanceof stream.Writable // => false ?
response instanceof stream.Stream // => true
});
const request = http.request();
request instanceof http.OutgoingMessage // => true
request instanceof stream.Writable // => false ?
request instanceof stream.Stream // => true
Я явно что-то упускаю, но для меня это еще не очевидно. Любой вклад приветствуется.