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);
}
})
本文探讨了如何改进HTTP请求的自动重试机制,避免在超时或错误时同时触发多个事件。作者推荐使用'requestretry'模块,该模块提供了一种更优雅的方式来处理请求重试,包括设置最大尝试次数、重试间隔和指定重试策略,确保在请求成功或达到最大尝试次数后才调用回调函数。
3328

被折叠的 条评论
为什么被折叠?



