From fd7932dc5b39b2ed433a62c74368e5bae0d61421 Mon Sep 17 00:00:00 2001 From: RafaelGSS Date: Mon, 31 Jan 2022 16:27:27 -0300 Subject: [PATCH] doc: add stream 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..a39847a6f81ada 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)`