From 62e5a4e7198d5d3bb22118e0851d0a4b93f04415 Mon Sep 17 00:00:00 2001 From: Denys Otrishko Date: Sun, 26 Jul 2020 12:40:17 +0300 Subject: [PATCH] Fix request consumption in server.js Previously stream errors during `req` consumption would lead to a hanged connection and resource/memory leak. This also removes redundant double-promise from receiveBody. PR-URL: https://github.com/HowProgrammingWorks/NodejsStarterKit/pull/174 --- lib/server.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/server.js b/lib/server.js index 4d90af3..99a122c 100644 --- a/lib/server.js +++ b/lib/server.js @@ -12,14 +12,14 @@ const LONG_RESPONSE = 30000; const clients = new Map(); -const receiveBody = async req => new Promise(resolve => { +const receiveBody = async req => { const buffers = []; - req.on('data', chunk => { + for await (const chunk of req) { buffers.push(chunk); - }).on('end', () => { - resolve(Buffer.concat(buffers).toString()); - }); -}); + } + return Buffer.concat(buffers).toString(); +}; + const closeClients = () => { for (const [connection, client] of clients.entries()) { @@ -56,6 +56,8 @@ const listener = (req, res) => { } receiveBody(req).then(data => { client.message(data); + }, err => { + client.error(500, err); }); } else { if (url === '/' && !req.connection.encrypted) {