Javascript 如何处理http.get响应中的未捕获异常

Javascript 如何处理http.get响应中的未捕获异常,javascript,node.js,http-get,uncaught-exception,eventemitter,Javascript,Node.js,Http Get,Uncaught Exception,Eventemitter,我有这段代码,可以使用API从第三方网站上下载新闻提要。它的设置为每5秒运行一次,并提取可能发生的任何新闻事务。问题似乎是当没有新的事务发生时 通过添加process.on('uncaughtexception',function(error){console.log(“hmph”)}),cron作业可以在5秒后继续,所以我想让它保持原样;然而,我将console.log(“hmph”)添加到了中,现在我感到困惑 第一次,控制台将写入hmph。5秒后,它将写入 陶瓷厚膜压力变送器 嗯哼 等等。我

我有这段代码,可以使用API从第三方网站上下载新闻提要。它的设置为每5秒运行一次,并提取可能发生的任何新闻事务。问题似乎是当没有新的事务发生时

通过添加process.on('uncaughtexception',function(error){console.log(“hmph”)}),cron作业可以在5秒后继续,所以我想让它保持原样;然而,我将console.log(“hmph”)添加到了中,现在我感到困惑

第一次,控制台将写入hmph。5秒后,它将写入 陶瓷厚膜压力变送器 嗯哼

等等。我知道我一定错过了什么,但我不太确定是什么。我已尝试在else语句中执行request.end(),但仍会引发错误

没有进程。在('uncaught…')上引发的错误是:

events.js:71 抛出参数[1];//未处理的“错误”事件 ^ 错误:解析错误 在Socket.socketOnData(http.js:1367:20) 在TCP.onread(net.js:403:27)

对于进程on('uncaught…'),console.log(错误)是:

{[Error:Parse Error]bytesParsed:161,代码:'HPE_INVALID_CONSTANT'}

如何正确处理此错误

缩写代码:

var job = new cronJob('*/5 * * * * *', function(){
  var request = http.get({
                            host: 'www.example.com',
                            path: '/news_feed?apicode=myapicode',
                            port: 80,
                            headers: { 'accept-encoding': 'gzip' } 
                         })

  request.on('response', function(response){
    if (response.statusCode == 200){
      // gunzip response, save response to mongodb
    } 
    else
    {
      // here is where the error is occuring
      process.on('uncaughtException',function(error){
        console.log(error);
        console.log("hmph");
    }
  });
}, null, true);

每次发出请求时,您都会绑定一个新的
uncaughtException
处理程序,因此当发送第一个请求时,您会绑定第一个,当第一个请求失败时,它会打印一个错误,然后在下一个请求时,您会添加另一个处理程序,当该处理程序失败时,第一个和第二个处理程序都会运行

检查错误,并在这里讨论这种类型的错误:您连接的服务器可能正在做一些奇怪的事情。目前最简单的解决方案可能是使用uncaughtException处理程序。这就是说,这是不理想的,你不应该这样做作为一个普遍的解决办法,未来的问题,像这样

var job = new cronJob('*/5 * * * * *', function(){
  var request = http.get({
    host: 'www.example.com',
    path: '/news_feed?apicode=myapicode',
    port: 80,
    headers: { 'accept-encoding': 'gzip' } 
  });
  request.on('response', function(response){
    if (response.statusCode == 200){
      // gunzip response, save response to mongodb
    }
  });
}, null, true);

process.on('uncaughtException',function(error){
  console.log(error);
  console.log("hmph");
});

我感谢你的回答;然而,我已经尝试过这样做了,我得到了:events.js:71 throw arguments[1];//未处理的“error”事件^error:Socket.socketOnData(http.js:1367:20)和TCP.onread(net.js:403:27)的解析错误,您确定要在我说的相同位置绑定吗?你没有把错误放在响应回调中,就像你有未捕获的异常句柄一样是的,我检查过了,它在同一个位置。这是你建议的完整代码。哎呀,在那段代码中,第28行.on('error')是我一直在玩的东西,试图在dif点测试它。不管怎样,同样的错误仍然会发生。我真的很感谢你的帮助:)谢谢你的帮助。有没有办法清除旧的错误处理程序,这样它们就不会累积?我担心最终会有大量的处理者,这可能会产生什么影响?