+38
-7
lines changedFilter options
+38
-7
lines changed Original file line number Diff line number Diff line change
@@ -1129,6 +1129,13 @@ independently.
1129
1129
1130
1130
Emitted when client starts a request.
1131
1131
1132
+
`http.client.request.error`
1133
+
1134
+
* `request` {http.ClientRequest}
1135
+
* `error` {Error}
1136
+
1137
+
Emitted when an error occurs during a client request.
1138
+
1132
1139
`http.client.response.finish`
1133
1140
1134
1141
* `request` {http.ClientRequest}
Original file line number Diff line number Diff line change
@@ -90,8 +90,19 @@ const kClientRequestStatistics = Symbol('ClientRequestStatistics');
90
90
91
91
const dc = require('diagnostics_channel');
92
92
const onClientRequestStartChannel = dc.channel('http.client.request.start');
93
+
const onClientRequestErrorChannel = dc.channel('http.client.request.error');
93
94
const onClientResponseFinishChannel = dc.channel('http.client.response.finish');
94
95
96
+
function emitErrorEvent(request, error) {
97
+
if (onClientRequestErrorChannel.hasSubscribers) {
98
+
onClientRequestErrorChannel.publish({
99
+
request,
100
+
error,
101
+
});
102
+
}
103
+
request.emit('error', error);
104
+
}
105
+
95
106
const { addAbortSignal, finished } = require('stream');
96
107
97
108
let debug = require('internal/util/debuglog').debuglog('http', (fn) => {
@@ -343,7 +354,7 @@ function ClientRequest(input, options, cb) {
343
354
if (typeof opts.createConnection === 'function') {
344
355
const oncreate = once((err, socket) => {
345
356
if (err) {
346
-
process.nextTick(() => this.emit('error', err));
357
+
process.nextTick(() => emitErrorEvent(this, err));
347
358
} else {
348
359
this.onSocket(socket);
349
360
}
@@ -465,7 +476,7 @@ function socketCloseListener() {
465
476
// receive a response. The error needs to
466
477
// fire on the request.
467
478
req.socket._hadError = true;
468
-
req.emit('error', new ConnResetException('socket hang up'));
479
+
emitErrorEvent(req, new ConnResetException('socket hang up'));
469
480
}
470
481
req._closed = true;
471
482
req.emit('close');
@@ -492,7 +503,7 @@ function socketErrorListener(err) {
492
503
// For Safety. Some additional errors might fire later on
493
504
// and we need to make sure we don't double-fire the error event.
494
505
req.socket._hadError = true;
495
-
req.emit('error', err);
506
+
emitErrorEvent(req, err);
496
507
}
497
508
498
509
const parser = socket.parser;
@@ -516,7 +527,7 @@ function socketOnEnd() {
516
527
// If we don't have a response then we know that the socket
517
528
// ended prematurely and we need to emit an error on the request.
518
529
req.socket._hadError = true;
519
-
req.emit('error', new ConnResetException('socket hang up'));
530
+
emitErrorEvent(req, new ConnResetException('socket hang up'));
520
531
}
521
532
if (parser) {
522
533
parser.finish();
@@ -541,7 +552,7 @@ function socketOnData(d) {
541
552
socket.removeListener('end', socketOnEnd);
542
553
socket.destroy();
543
554
req.socket._hadError = true;
544
-
req.emit('error', ret);
555
+
emitErrorEvent(req, ret);
545
556
} else if (parser.incoming && parser.incoming.upgrade) {
546
557
// Upgrade (if status code 101) or CONNECT
547
558
const bytesParsed = ret;
@@ -872,7 +883,7 @@ function onSocketNT(req, socket, err) {
872
883
err = new ConnResetException('socket hang up');
873
884
}
874
885
if (err) {
875
-
req.emit('error', err);
886
+
emitErrorEvent(req, err);
876
887
}
877
888
req._closed = true;
878
889
req.emit('close');
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
1
1
'use strict';
2
2
const common = require('../common');
3
+
const { addresses } = require('../common/internet');
3
4
const assert = require('assert');
4
5
const http = require('http');
5
6
const net = require('net');
@@ -9,9 +10,15 @@ const isHTTPServer = (server) => server instanceof http.Server;
9
10
const isIncomingMessage = (object) => object instanceof http.IncomingMessage;
10
11
const isOutgoingMessage = (object) => object instanceof http.OutgoingMessage;
11
12
const isNetSocket = (socket) => socket instanceof net.Socket;
13
+
const isError = (error) => error instanceof Error;
12
14
13
15
dc.subscribe('http.client.request.start', common.mustCall(({ request }) => {
14
16
assert.strictEqual(isOutgoingMessage(request), true);
17
+
}, 2));
18
+
19
+
dc.subscribe('http.client.request.error', common.mustCall(({ request, error }) => {
20
+
assert.strictEqual(isOutgoingMessage(request), true);
21
+
assert.strictEqual(isError(error), true);
15
22
}));
16
23
17
24
dc.subscribe('http.client.response.finish', common.mustCall(({
@@ -50,8 +57,14 @@ const server = http.createServer(common.mustCall((req, res) => {
50
57
res.end('done');
51
58
}));
52
59
53
-
server.listen(() => {
60
+
server.listen(async () => {
54
61
const { port } = server.address();
62
+
const invalidRequest = http.get({
63
+
host: addresses.INVALID_HOST,
64
+
});
65
+
await new Promise((resolve) => {
66
+
invalidRequest.on('error', resolve);
67
+
});
55
68
http.get(`http://localhost:${port}`, (res) => {
56
69
res.resume();
57
70
res.on('end', () => {
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4