Почему «stream» реализует «pipe», когда только stream.Readable способны передавать? - PullRequest
3 голосов
/ 20 января 2020

Это довольно запутанное поведение при изучении потоков / 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

Я явно что-то упускаю, но для меня это еще не очевидно. Любой вклад приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...