Thanks for answers in https://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a-http-request-in-node
The problem can mainly divided into two part in my implemention:
- connection timeout
- response timeout
connection timeout
On request stage:1
2
3
4
5
6
7
8
9
10
11
12
13// set the desired timeout in options
const options = {
//...
timeout: 3000,
};
// create a request
const request = http.request(options, response => {
// your callback here
});
// use its "timeout" event to abort the request
request.on('timeout', () => {
request.abort();
});response timeout
On response stage:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18var options = { ... }
var req = http.request(options, (res) => {
// Usual stuff: on(data), on(end), chunks, etc...
});
req.on('socket', (socket) => {
socket.setTimeout(myTimeout);
socket.on('timeout', () => {
req.destroy();
});
});
req.on('error', (err) => {
if (err.code === "ECONNRESET") {
console.log("Timeout occurs");
//specific error treatment
}
//other error treatment
});
req.end();