From fb8c5a947b7efd0395b473b75ae3f80b6a49305b Mon Sep 17 00:00:00 2001 From: RafaelGSS Date: Mon, 31 Jan 2022 16:27:27 -0300 Subject: [PATCH] doc: add steam pipelining note on Http usage --- doc/api/stream.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/doc/api/stream.md b/doc/api/stream.md index 69b73f8a740189..458b37eb4cf673 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -2517,6 +2517,28 @@ run().catch(console.error); after the `callback` has been invoked. In the case of reuse of streams after failure, this can cause event listener leaks and swallowed errors. +`stream.pipeline()` closes all the streams when an error is raised. +The `IncomingRequest` usage with `pipeline` could lead to an unexpected behavior +once it would destroy the socket without sending the expected response. +See the example below: + +```js +const fs = require('fs') +const http = require('http') +const { pipeline } = require('stream') + +const server = http.createServer((req, res) => { + const fileStream = fs.createReadStream('./fileNotExist.txt') + pipeline(fileStream, res, (err) => { + if (err) { + console.log(err) // No such file + // this message can't be sent once `pipeline` already destroyed the socket + return res.end("error!!!"); + } + }) +}) +``` + ### `stream.compose(...streams)`