diff options
author | Matteo Collina <hello@matteocollina.com> | 2019-09-03 09:41:15 +0200 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2019-12-03 12:14:50 +0100 |
commit | 286b4536c5bf754150fc5e42db06acae9691da13 (patch) | |
tree | eb9b81cea64f03f29b228465d965fe11f26e36a6 /lib | |
parent | e490d9b1539a7ec5f6b9d9b2f18753ce1c3459f7 (diff) | |
download | android-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.tar.gz android-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.tar.bz2 android-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.zip |
http: implement capture rejections for 'request' event
PR-URL: https://github.com/nodejs/node/pull/27867
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/_http_server.js | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/_http_server.js b/lib/_http_server.js index 6c52f7adbc..3444c44a6c 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -27,6 +27,7 @@ const { } = primordials; const net = require('net'); +const EE = require('events'); const assert = require('internal/assert'); const { parsers, @@ -357,6 +358,26 @@ Server.prototype.setTimeout = function setTimeout(msecs, callback) { return this; }; +Server.prototype[EE.captureRejectionSymbol] = function( + err, event, req, res) { + + switch (event) { + case 'request': + if (!res.headersSent && !res.writableEnded) { + // Don't leak headers. + for (const name of res.getHeaderNames()) { + res.removeHeader(name); + } + res.statusCode = 500; + res.end(STATUS_CODES[500]); + } else { + res.destroy(); + } + break; + default: + this.emit('error', err); + } +}; function connectionListener(socket) { defaultTriggerAsyncIdScope( |