Node.JS HTTP请求超时

Node.JS HTTP请求超时,node.js,Node.js,我有一个应用程序,将需要HTTP请求的主要和次要的URL。当主URL关闭时,我需要能够优雅地处理此问题并故障切换到辅助URL。我已经运行了故障切换功能,但在处理超时时遇到了问题 经过一些搜索,我发现节点没有默认超时,所以我设置了一个。我遇到的问题是,在设置请求超时后,套接字保持打开状态。如果我销毁或中止该请求,它会抛出一个错误,表明该请求已过早退出。我知道我可以用一个req.on('error')来处理这个问题,但是如果必要的话,我希望能够将它用于其他错误处理。我试过几种方法来打发时间 第一种方

我有一个应用程序,将需要HTTP请求的主要和次要的URL。当主URL关闭时,我需要能够优雅地处理此问题并故障切换到辅助URL。我已经运行了故障切换功能,但在处理超时时遇到了问题

经过一些搜索,我发现节点没有默认超时,所以我设置了一个。我遇到的问题是,在设置请求超时后,套接字保持打开状态。如果我销毁或中止该请求,它会抛出一个错误,表明该请求已过早退出。我知道我可以用一个req.on('error')来处理这个问题,但是如果必要的话,我希望能够将它用于其他错误处理。我试过几种方法来打发时间

第一种方法是在套接字上设置超时并销毁它。这会导致套接字挂起错误

var req= https.request(options, function(res){
    //Handle response based on return code
});


req.on('socket', function(socket){
     socket.setTimeout(10000);
     socket.on('timeout', function(){
         socket.destroy();
          self.emit("runAgain");
     })
});

req.on('error', function(err){
    console.log(err);
}); 

req.end();
我尝试的另一种方法是对请求设置一个暂停时间。这导致EconReset错误

req.setTimeout(100, function(){
   req.destroy();
   console.log('request destroyed');
})

我正在寻找最好的方法来处理这个问题,这样我就不必设置一个超时,然后如果可能的话捕获一个错误

您只需订阅自己发出的“再次运行”事件,或者在周围放置一个计数器或其他什么:

self.madeSecondaryRequest = false;

self.on("runAgain", function() {
    if(!self.madeSecondaryRequest) {
        console.log("Hey I could make my request again!");
        self.madeSecondaryRequest = true;
    }
});