From 1443d623d4b5d59e4463e025b4125be9a5aa3436 Mon Sep 17 00:00:00 2001 From: Andrei Zeliankou Date: Fri, 17 Nov 2023 17:27:31 +0000 Subject: [PATCH] Node.js: ServerResponse.flushHeaders() implemented. This closes #1006 issue on GitHub. Reviewed-by: Andrew Clayton --- docs/changes.xml | 7 +++++++ src/nodejs/unit-http/http_server.js | 4 ++++ test/node/flush_headers/app.js | 7 +++++++ test/test_node_application.py | 4 ++++ 4 files changed, 22 insertions(+) create mode 100644 test/node/flush_headers/app.js diff --git a/docs/changes.xml b/docs/changes.xml index 2c01a1e0..6b1aaf71 100644 --- a/docs/changes.xml +++ b/docs/changes.xml @@ -33,6 +33,13 @@ can be used as a unique request identifier. + + +ServerRequest.flushHeaders() implemented in Node.js module to make it compatible +with Next.js. + + + diff --git a/src/nodejs/unit-http/http_server.js b/src/nodejs/unit-http/http_server.js index 0f00b47f..8eb13d7f 100644 --- a/src/nodejs/unit-http/http_server.js +++ b/src/nodejs/unit-http/http_server.js @@ -138,6 +138,10 @@ ServerResponse.prototype.removeHeader = function removeHeader(name) { } }; +ServerResponse.prototype.flushHeaders = function flushHeaders() { + this._sendHeaders(); +}; + ServerResponse.prototype._removeHeader = function _removeHeader(lc_name) { let entry = this.headers[lc_name]; let name_len = Buffer.byteLength(entry[0] + "", 'latin1'); diff --git a/test/node/flush_headers/app.js b/test/node/flush_headers/app.js new file mode 100644 index 00000000..4c0e93bc --- /dev/null +++ b/test/node/flush_headers/app.js @@ -0,0 +1,7 @@ + +require('http').createServer(function (req, res) { + res.setHeader('X-Header', 'blah'); + res.flushHeaders(); + res.flushHeaders(); // Should be idempotent. + res.end(); +}).listen(8080); diff --git a/test/test_node_application.py b/test/test_node_application.py index ab8aa8f8..5077b9cb 100644 --- a/test/test_node_application.py +++ b/test/test_node_application.py @@ -303,6 +303,10 @@ def test_node_application_get_header_names(): 'x-header', ], 'get header names' +def test_node_application_flush_headers(): + client.load('flush_headers') + + assert client.get()['headers']['X-Header'] == 'blah' def test_node_application_has_header(): client.load('has_header')