diff options
author | Fedor Indutny <fedor@indutny.com> | 2016-01-06 17:00:27 -0500 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2016-01-07 03:39:15 -0500 |
commit | 5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a (patch) | |
tree | c71a3fa6e69e57b9a50ad51188e7a2e9a19f53c7 /test/parallel/test-http-server-client-error.js | |
parent | 1ab6b21360d97719b3101153fb164c0c3eddf038 (diff) | |
download | android-node-v8-5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a.tar.gz android-node-v8-5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a.tar.bz2 android-node-v8-5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a.zip |
http: overridable `clientError`
Make default `clientError` behavior (close socket immediately)
overridable. With this APIs it is possible to write a custom error
handler, and to send, for example, a 400 HTTP response.
http.createServer(...).on('clientError', function(err, socket) {
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
socket.destroy();
});
Fix: #4543
PR-URL: https://github.com/nodejs/node/pull/4557
Reviewed-By: Brian White <mscdex@mscdex.net>
Diffstat (limited to 'test/parallel/test-http-server-client-error.js')
-rw-r--r-- | test/parallel/test-http-server-client-error.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/parallel/test-http-server-client-error.js b/test/parallel/test-http-server-client-error.js new file mode 100644 index 0000000000..619a4c4517 --- /dev/null +++ b/test/parallel/test-http-server-client-error.js @@ -0,0 +1,39 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); + +const http = require('http'); +const net = require('net'); + +const server = http.createServer(common.mustCall(function(req, res) { + res.end(); +})); + +server.on('clientError', common.mustCall(function(err, socket) { + socket.end('HTTP/1.1 400 Bad Request\r\n\r\n'); + + server.close(); +})); + +server.listen(common.PORT, function() { + function next() { + // Invalid request + const client = net.connect(common.PORT); + client.end('Oopsie-doopsie\r\n'); + + var chunks = ''; + client.on('data', function(chunk) { + chunks += chunk; + }); + client.once('end', function() { + assert.equal(chunks, 'HTTP/1.1 400 Bad Request\r\n\r\n'); + }); + } + + // Normal request + http.get({ port: common.PORT, path: '/' }, function(res) { + assert.equal(res.statusCode, 200); + res.resume(); + res.once('end', next); + }); +}); |