I'm trying to automatically retry HTTP requests on timeout or error.
Currently my code looks like this:
var req = http.get(url, doStuff)
.on('error', retry)
.setTimeout(10000, retry);
However, a single request can sometimes trigger both "on error" and "timeout" events. What is a better way of implementing retry?
解决方案
I was looking for same thing and found interesting module requestretry, well suited for such requirement.
Here is usage:
var request = require('requestretry')
request({
url: myURL,
json: true,
maxAttempts: 5, // (default) try 5 times
retryDelay: 5000, // (default) wait for 5s before trying again
retrySrategy: request.RetryStrategies.HTTPOrNetworkError // (default) retry on 5xx or network errors
}, function(err, response, body){
// this callback will only be called when the request succeeded or after maxAttempts or on error
if (response) {
console.log('The number of request attempts: ' + response.attempts);
}
})