1

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

通过添加 process.on('uncaught exception', function(error){ console.log("hmph") }) cron 作业可以在 5 秒后继续,所以我很想保持原样;但是,我添加了 console.log("hmph") ,现在我很困惑。

第一次,控制台会写hmph。5 秒后它会写 hmph hmph

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

没有 process.on('uncaught...') 抛出的错误是:

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

使用 proccess.on('uncaught...') console.log(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);
4

1 回答 1

3

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

检查错误,并在此处讨论此类错误:https ://github.com/joyent/node/issues/3354您连接的服务器似乎正在做一些奇怪的事情。对您来说最简单的解决方案可能是现在使用 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");
});
于 2013-01-18T07:30:36.070 回答